如果我在linux下的python中运行它,它可以工作:
start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end
但是如果我在Windows中运行它不起作用,我怎样才能使ANSI转义码在Windows上运行?
答案 0 :(得分:15)
您可以查看Python module to enable ANSI colors for stdout on Windows?以查看它是否有用。
colorama模块似乎是跨平台的。
您安装了colorama:
pip install colorama
然后:
import colorama
colorama.init()
start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end
答案 1 :(得分:8)
这是我长期以来寻求的解决方案。只需使用标准库中的ctypes
模块。默认情况下,它在Windows上使用Python 3.x安装,仅 。因此,在使用该操作系统之前,请先检查该操作系统是否为Windows(例如,使用platform.system
)。
from platform import system
if "win" in system().lower(): # works for Win7, 8, 10 ...
from ctypes import windll
k = windll.kernel32
k.SetConsoleMode(k.GetStdHandle(-11), 7)
完成此操作后,就可以像使用Unix操作系统一样使用ASCII特殊字符(例如\x1b[31m
,代表红色):
message = "ERROR"
print(f"\x1b[31m{message}\x1b[0m")
我喜欢此解决方案,因为它不需要安装模块(例如colorama或termcolor)。
答案 2 :(得分:4)
您可以查看https://github.com/kennethreitz/clint
自述文件:
>>> from clint.textui import colored, puts
>>> puts(colored.red('red text'))
red text
# It's red in Windows, OSX, and Linux alike.
答案 3 :(得分:4)
对于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"])
答案 4 :(得分:2)
如果您使用的是Win 10(在cmd中具有本机ANSI支持),则似乎有一个bug which was marked as resolvedin Python 3.7(尽管它看起来实际上不是固定的)。
一种解决方法是在打印之前添加subprocess.call('', shell=True)
。
答案 5 :(得分:2)
尝试在此处\033[;
添加分号,如果没有该分号,我会得到不良效果。
start = "\033[;1;31m"
end = "\033[;0;0m"
答案 6 :(得分:1)
我写了一个简单的模块,可在以下网址找到:http://pypi.python.org/pypi/colorconsole
适用于Windows,Mac OS X和Linux。它使用ANSI for Linux和Mac,但在Windows上本机调用控制台功能。你有颜色,光标定位和键盘输入。它不是curses的替代品,但如果你需要在简单的脚本或ASCII游戏中使用,它会非常有用。
可在此处找到文档:http://code.google.com/p/colorconsole/wiki/PageName
PS:这是Print in terminal with colors using Python?的答案,但我不知道如何链接到答复。
答案 7 :(得分:1)
您可以这样做:
import os
os.system("")
这对我有用。默认情况下,命令提示符不支持颜色。
答案 8 :(得分:1)
这是我使用过的更简单的代码。
Any
答案 9 :(得分:0)
根据互联网上成千上万个好的答案,发送ANSI转义序列应该可以工作,但是一个晦涩的细节花了我半天的时间才发现。诀窍是必须设置某个注册表项。我正在使用(仅适用于今天)Windows 10 Enterprise,版本1709,内部版本16299。
在HKEY_CURRENT_USER中,在控制台下的TrimLeadingZeros和WindowAlpha之间,应该有VirtualTerminalLevel。如果不存在,请继续创建它。这是REG_DWORD。将其值设置为1。打开一个新的终端,运行Python,然后开始玩。
print("\033[48;2;255;140;60m ORANGE BACKGROUND \033[48;2;0;0;0m")
请参阅https://github.com/ytdl-org/youtube-dl/issues/15758,以由比我了解更多的人来阅读。
现在,如果我还记得为什么,我想给Python程序的输出着色...
答案 10 :(得分:0)
import os
os.system("")
COR = {
"HEADER": "\033[95m",
"BLUE": "\033[94m",
"GREEN": "\033[92m",
"RED": "\033[91m",
"ENDC": "\033[0m",
}
print(COR["RED"]+"Testing Green!!"+COR["ENDC"])