【问题标题】:Python module to enable ANSI colors for stdout on Windows?Python 模块在 Windows 上为标准输出启用 ANSI 颜色?
【发布时间】:2012-01-11 14:42:06
【问题描述】:

我正在寻找可以在 Windows 下添加 ANSI 支持的 Python 模块。

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

【问题讨论】:

  • 这意味着猴子补丁Python,这是一件坏事。最好明确设置标准输出过滤器。

标签: python terminal console ansi-escape


【解决方案1】:

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

事实上,我相信 Windows 控制台本身并不支持 ANSI 颜色。 colorama 通过拦截 ANSI 序列并执行适当的 Windows 颜色更改调用来解决这个难题。通过这种方式,您的代码可以非常便携,因为它可以在 Windows 和 ANSI 兼容的终端上以相同的方式打印颜色。

【讨论】:

    【解决方案2】:

    有两个 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 代码输出到屏幕并重定向输出。

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

    【讨论】:

    • 日志文件中的ANSI转义很好,我相信;例如,less Unix 寻呼机可以正确显示带有 ANSI 颜色序列的文本。
    【解决方案3】:

    您也可以使用 colorful,它使用 colorama 来实现可移植性。

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 2017-04-06
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多