2013-02-20 68 views
4

我有一个奇怪的问题,我不能把手指放在上面。我使用了一个程序(并不时有所贡献),该程序使控制台输出着色。一切工作很好,直到我重新安装Windows。现在我无法获得彩色输出。打印彩色输出 - 从控制台而不是从脚本工作

这是用于着色的script

我已经设法将问题缩小到或多或少的简单情况,但我不知道什么是错的。

这是控制台提示符下按预期工作(字符串test红色印):

Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.path.insert(0, r'c:\bin\SV\tea\src') 
>>> from tea.console.color import cprint, Color 
>>> cprint('test\n', Color.red) 
test 
>>> 

但是当我运行下面的脚本与相同版本的Python我得到的输出test但不是在红色(有没有颜色,只是默认的控制台颜色):

import sys 
sys.path.insert(0, r'c:\bin\SV\tea\src') 

from tea.console.color import cprint, Color 
cprint('test\n', Color.red) 
  • 之前,我重新安装了系统相同的设置工作。
  • 我已经检查过,交互模式和脚本中的环境变量是相同的。
  • 我已经在标准的Windows命令提示符和控制台中试过这个,我通常使用的程序是 。
  • 有问题的操作系统是Windows 8,在重新安装之前,这也在Windows 8上使用。
  • 相同的代码具有相同的安装程序在工作的计算机(Windows 7)工作。
  • 我安装了Python 2.7和Python 3.3(正如我以前所做的那样)。我试图运行脚本 与直接调用python解释器(c:\Python27\python.exe)或与py -2, 但它没有帮助。
  • IPython和mercurial按照它应该的颜色输出。

任何想法我可以尝试使这项工作?

编辑

也许并不清楚,但剧本我用上色输出有问题的链接中给出。在这里它再次: https://bitbucket.org/alefnula/tea/src/dc14009a19d66f92463549332a321b29c71d47b8/src/tea/console/color.py?at=default

+0

你可以分享代码到'tea.console.color'吗?例如,是否在管道环境中使用终端检测来禁用颜色? – 2013-02-23 16:43:58

+0

有问题的tea.console.color的链接。我将编辑问题以使其更清楚。 – 2013-02-23 17:20:56

+0

查看[utils模块源代码](https://bitbucket.org/alefnula/tea/src/dc14009a19d6/src/tea/system/__init__.py?at=default)我想知道*为什么*该项目不'使用['platform'](http://docs.python.org/2/library/platform.html)模块?平台检测完全有可能在某处出错。 – 2013-02-23 17:25:34

回答

4

我发现问题和解决方案。

我认为问题在于x64 ctypes模块中的错误。我安装了Python 2.7 x64和与该版本以下行(从脚本,我有问题的链接):与描述The handle is invalid

ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, code) 

返回错误代码6。经过一番调查,我推断出这个问题可能是python的x64版本,所以我安装了32位版本,并且所有内容都按预期工作。

由于这解决了我的问题,而且我没有时间进行更深入的分析,所以我会将其留在此处,只是想给出某种问题的解决方案。