我将我的Python安装从3.4更新到3.5(Windows 7 Enterprise 64位上的CPython 64位)。在更新后,colorama停止将ANSI转义序列转换为Win32 API调用以更改命令行终端颜色。
需要明确colorama.init(convert=True)
才能获得彩色输出。我试图缩小错误:
init()
,可以解决这个问题。所以我假设如果从Powershell启动,Python无法识别Windows环境?
有人可以重现这种奇怪的行为吗?我应该怎么解决它。启用convert
会在Linux上出现问题。
答案 0 :(得分:2)
我搜索了colorama 0.3.3来源并找到了确定它是否正在运行窗口的代码:
...
on_windows = os.name == 'nt'
on_emulated_windows = on_windows and 'TERM' in os.environ
# should we strip ANSI sequences from our output?
if strip is None:
strip = on_windows and not on_emulated_windows
self.strip = strip
# should we should convert ANSI sequences into win32 calls?
if convert is None:
convert = on_windows and not wrapped.closed and not on_emulated_windows and is_a_tty(wrapped)
self.convert = convert
....
一个条件是是否设置了TERM
环境变量。不幸的是,我的PowerShell控制台声称是一个cygwin终端。
但我自己从未安装过cygwin。所以我要搜索安装了cygwin的程序并将其注册到我的PowerShell中!?!
修改强>
我发现,PoSh-Git注册了一个TERM
变量。作为解决方法,我在加载PoSh-Git后立即添加了rm env:TERM
行。
在PoSh-Git更新后,该变量被删除了,所以我也删除了我的解决方法。