打印彩色输出 - 从控制台工作但在脚本中无效

4 投票
1 回答
515 浏览
提问于 2025-04-17 16:34

我遇到了一个奇怪的问题,搞不清楚原因。我有一个程序(我偶尔会参与贡献),它能在控制台输出彩色文本。之前一切都很好,直到我重新安装了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)或者用 py -2,但都没有帮助。
  • IPython和Mercurial的输出可以正常上色。

有没有什么建议可以让我解决这个问题?

编辑

也许之前没有说清楚,我用来给输出上色的脚本在问题中有链接。这里再给一次: https://bitbucket.org/alefnula/tea/src/dc14009a19d66f92463549332a321b29c71d47b8/src/tea/console/color.py?at=default

1 个回答

4

我找到了问题和解决办法。

我觉得问题出在x64的ctypes模块上。我安装的是64位的Python 2.7,使用这个版本时,下面这行代码(来自我在问题中提到的脚本):

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

会返回错误代码6,错误描述是句柄无效。经过一些调查,我推测问题可能是因为使用了64位的Python,所以我安装了32位版本,结果一切都正常了。

既然这个解决了我的问题,而我又没有时间进行更深入的分析,所以就先这样吧,想给这个问题提供一个解决方案。

撰写回答