4

我有一个奇怪的问题,我无法解决。我使用(并且不时提供)一个具有彩色控制台输出的程序。在我重新安装 Windows 之前,一切都很好。现在我无法获得彩色输出。

这是用于着色的脚本。

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

这是按预期工作的控制台提示符(字符串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) 或 with来运行脚本py -2,但它没有帮助。
  • IPython 和 mercurial 会按应有的方式对输出进行着色。

有什么想法可以尝试使这项工作吗?

编辑

也许不清楚,但我用来着色输出的脚本在有问题的链接中给出。又来了: https ://bitbucket.org/alefnula/tea/src/dc14009a19d66f92463549332a321b29c71d47b8/src/tea/console/color.py?at=default

4

1 回答 1

4

我找到了问题和解决方案。

我相信问题出在 x64 ctypes 模块中的错误。我安装了 Python 2.7 x64 并使用该版本以下行(来自我有问题链接的脚本):

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

返回带有描述的错误代码 6 The handle is invalid。经过一番调查,我推断问题可能是 x64 版本的 python,所以我安装了 32 位版本,一切正常。

由于这解决了我的问题,而且我没有时间进行更深入的分析,所以我将把它留在这里,只是想给出一些问题的解决方案。

于 2013-02-24T16:48:42.443 回答