Python模块在Windows上为标准输出启用ANSI颜色?

Python模块在Windows上为标准输出启用ANSI颜色?,python,terminal,console,ansi-escape,Python,Terminal,Console,Ansi Escape,我正在寻找一个Python模块,它将在Windows下添加ANSI支持 这意味着在导入模块后,如果输出ANSI转义字符串,它们将相应地出现。您最好的选择可能是使用该模块 事实上,我认为Windows控制台不支持ANSI颜色。colorama通过截取ANSI序列并执行适当的Windows颜色更改调用来解决此问题。通过这种方式,您的代码可以非常方便地移植,因为它可以在Windows和符合ANSI标准的终端上以相同的方式打印颜色。有两个python模块可以做到这一点和最初为其编写的模块 初步测试表明,

我正在寻找一个Python模块,它将在Windows下添加ANSI支持


这意味着在导入模块后,如果输出ANSI转义字符串,它们将相应地出现。

您最好的选择可能是使用该模块


事实上,我认为Windows控制台不支持ANSI颜色。colorama通过截取ANSI序列并执行适当的Windows颜色更改调用来解决此问题。通过这种方式,您的代码可以非常方便地移植,因为它可以在Windows和符合ANSI标准的终端上以相同的方式打印颜色。

有两个python模块可以做到这一点和最初为其编写的模块

初步测试表明,
colorama
更为成熟,即使它需要两行代码而不是一行

import sys
try:
   import colorama
   colorama.init()
except:
   try:
       import tendo.ansiterm
   except:
       pass

sys.stdout.write"\033[33mYellow Submarine"
sys.stderr.write"\033[31mred, red , wine!"
现在,两者都可以正常工作,但如果您尝试只重定向一个stderr或stdout,ansiterm将向屏幕输出ANSI代码并重定向输出


我不确定,但我怀疑正确的行为是在输出不是tty时剥离ANSI代码,您不希望在日志文件中看到ANSI转义。

您也可以使用colorama进行移植。

我相信,在日志文件中的ANSI转义是可以的;例如,
less
Unix寻呼机正确地显示带有ANSI颜色序列的文本,这意味着monkeypatching Python,这是一件坏事。最好显式设置标准输出过滤器。