Python:如何使ANSI转义码在Windows中也能正常工作?

Edu*_*scu 12 python windows ansi-escape python-2.7

如果我在linux下的python中运行它可以工作:

start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end
Run Code Online (Sandbox Code Playgroud)

但是,如果我在Windows中运行它不起作用,我怎样才能使ANSI转义码在Windows上运行?

Gar*_*ubb 20

对于 Windows,调用 os.system("color") 会使 ANSI 转义序列得到正确处理:

import os
os.system("color")

COLOR = {
    "HEADER": "\033[95m",
    "BLUE": "\033[94m",
    "GREEN": "\033[92m",
    "RED": "\033[91m",
    "ENDC": "\033[0m",
}

print(COLOR["GREEN"], "Testing Green!!", COLOR["ENDC"])
Run Code Online (Sandbox Code Playgroud)

  • 你不需要调用颜色。命令提示符默认支持颜色,所以你可以只执行 `os.system("")` (至少对我来说) (5认同)
  • 很好的答案,因为它不需要安装新模块 (2认同)
  • `os.system("color")` 比 `os.system("")` 更明确。想想看,阅读代码的人对后者的预期是多么的少。 (2认同)

pr0*_*g3d 16

您可以检查Python模块以在Windows上为stdout启用ANSI颜色吗?看它是否有用.

彩色光模块似乎是跨平台的.

你安装colorama:

pip install colorama
Run Code Online (Sandbox Code Playgroud)

然后:

import colorama
colorama.init()
start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end
Run Code Online (Sandbox Code Playgroud)


Ubu*_*que 11

这是我长期寻求的解决方案。只需使用标准库中ctypes模块即可。默认情况下,它与 Python 3.x 一起安装,在 Windows 上。因此,在使用它之前请检查操作系统是否为 Windows(例如,使用 )。platform.system

import os
if os.name == 'nt': # Only if we are running on Windows
    from ctypes import windll
    k = windll.kernel32
    k.SetConsoleMode(k.GetStdHandle(-11), 7)
Run Code Online (Sandbox Code Playgroud)

完成后,您可以使用 ASCII 特殊字符(如\x1b[31m, 表示红色),就像在 Unix 操作系统上一样:

message = "ERROR"
print(f"\x1b[31m{message}\x1b[0m")
Run Code Online (Sandbox Code Playgroud)

我喜欢这个解决方案,因为它不需要安装模块(如 colorama 或 termcolor)。

  • 确切地!这才是程序员应该正确、高效的思考方式!(当可以使用内置模块解决问题时,使用额外软件包来解决问题的人数令人惊讶!) (2认同)

Dan*_* M. 8

如果您使用的是 Win 10(在 cmd 中具有本机 ANSI 支持),则似乎存在一个在 Python 3.7 中标记为已解决错误(尽管它看起来并未实际修复)。

一种解决方法是subprocess.call('', shell=True)在打印前添加。