【发布时间】:2012-01-11 14:42:06
【问题描述】:
我正在寻找可以在 Windows 下添加 ANSI 支持的 Python 模块。
这意味着导入模块后,如果你输出ANSI转义字符串,它们会相应出现。
【问题讨论】:
-
这意味着猴子补丁Python,这是一件坏事。最好明确设置标准输出过滤器。
标签: python terminal console ansi-escape
我正在寻找可以在 Windows 下添加 ANSI 支持的 Python 模块。
这意味着导入模块后,如果你输出ANSI转义字符串,它们会相应出现。
【问题讨论】:
标签: python terminal console ansi-escape
您最好的选择可能是使用colorama 模块。
事实上,我相信 Windows 控制台本身并不支持 ANSI 颜色。 colorama 通过拦截 ANSI 序列并执行适当的 Windows 颜色更改调用来解决这个难题。通过这种方式,您的代码可以非常便携,因为它可以在 Windows 和 ANSI 兼容的终端上以相同的方式打印颜色。
【讨论】:
有两个 python 模块可以做到这一点 colorama 和 tendo.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 代码输出到屏幕并重定向输出。
我不确定,但我怀疑正确的行为是在输出 si 不是 tty 时去除 ANSI 代码,您不想在日志文件中看到 ANSI 转义。
【讨论】:
less Unix 寻呼机可以正确显示带有 ANSI 颜色序列的文本。
您也可以使用 colorful,它使用 colorama 来实现可移植性。
【讨论】: