用于在Windows上启用ANSI颜色的Python模块?

18
我正在寻找一个Python模块,它可以在Windows下添加ANSI支持。这意味着,在导入该模块后,如果输出ANSI转义字符串,它们将相应地显示。

这意味着猴子补丁Python,这是一件坏事。最好明确地设置stdout过滤器。 - anatoly techtonik
3个回答

14
你最好使用colorama模块。
事实上,我相信Windows控制台不支持本地ANSI颜色。colorama通过拦截ANSI序列并执行适当的Windows颜色更改调用来解决这个问题。这样,你的代码可以非常便携,因为它可以在Windows和符合ANSI标准的终端上以相同的方式打印颜色。

9
有两个Python模块可以实现此功能:coloramatendo.ansiterm模块,后者最初是为waf编写的。

经过初步测试表明,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转义。

1
日志文件中的 ANSI 转义是可以的,例如 Unix 分页器 less 可以正确显示带有 ANSI 颜色序列的文本。 - Eric O. Lebigot

2
你也可以使用 colorful,它使用 colorama 实现可移植性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接