Python 3.5:Colorama无法识别Windows环境

时间:2015-11-13 17:48:27

标签: python powershell python-3.5 colorama

我将我的Python安装从3.4更新到3.5(Windows 7 Enterprise 64位上的CPython 64位)。在更新后,colorama停止将ANSI转义序列转换为Win32 API调用以更改命令行终端颜色。

需要明确colorama.init(convert=True)才能获得彩色输出。我试图缩小错误:

  1. 自Python 3.5更新以来它出现了
  2. 如果我使用convert选项隐式调用init(),可以解决这个问题。
  3. 从cmd.exe启动彩色Python脚本按预期工作。
  4. 从powershell.exe启动彩色Python脚本会显示所描述的行为。
  5. 所以我假设如果从Powershell启动,Python无法识别Windows环境?

    有人可以重现这种奇怪的行为吗?我应该怎么解决它。启用convert会在Linux上出现问题。

1 个答案:

答案 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更新后,该变量被删除了,所以我也删除了我的解决方法。