31

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

start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end

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

4

11 回答 11

30

对于 Windows,调用os.system("")可以正确处理 ANSI 转义序列:

import os
os.system("")  # enables ansi escape characters in terminal

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

print(COLOR["GREEN"], "Testing Green!!", COLOR["ENDC"])
于 2020-10-06T09:19:54.187 回答
21

您可以检查Python 模块以在 Windows 上为标准输出启用 ANSI 颜色吗?看看它是否有用。

colorama模块似乎是跨平台的。

你安装 colorama:

pip install colorama

然后:

import colorama
colorama.init()
start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end
于 2012-09-19T10:47:37.460 回答
18

这是我长期以来寻求的解决方案。只需使用标准库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)

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

message = "ERROR"
print(f"\x1b[31m{message}\x1b[0m")

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

于 2020-02-12T17:55:31.483 回答
9

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

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

于 2018-07-25T17:01:29.287 回答
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.
于 2012-09-19T10:36:08.257 回答
3

你可以这样做:

import os
os.system("")

这对我有用。命令提示符默认支持颜色。

于 2020-10-19T15:59:56.717 回答
2

根据互联网上成千上万的好答案,发送 ANSI 转义序列应该可以工作,但是一个模糊的细节花了我两天半的时间才偶然发现。诀窍是必须设置某个注册表项。我正在使用(仅适用于今天)Windows 10 Enterprise,版本 1709,内部版本 16299。

在 HKEY_CURRENT_USER 中,在 Console 下,在 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 程序的输出着色...

于 2019-07-22T23:27:20.907 回答
2

这是我使用过的更简单的代码。

import os
os.system("color") # Alternative - os.system("")

TCOLOR = "\033[31;3m"
ENDC = "\033[m"
print (TCOLOR + "Make yourself happy" + ENDC)
于 2021-08-05T06:59:17.213 回答
1

我写了一个简单的模块,可在: http: //pypi.python.org/pypi/colorconsole

它适用于 Windows、Mac OS X 和 Linux。它对 Linux 和 Mac 使用 ANSI,但在 Windows 上对控制台函数进行本地调用。您有颜色、光标定位和键盘输入。它不能替代 curses,但如果您需要在简单的脚本或 ASCII 游戏中使用它会非常有用。

可以在此处找到文档:http ://code.google.com/p/colorconsole/wiki/PageName

PS:这与使用 Python 在终端中打印颜色的答案相同吗?,但我不知道如何链接到回复。

于 2012-09-19T11:10:32.677 回答
1

尝试在此处添加分号\033[;,如果没有该分号,我会得到不良影响。

start = "\033[;1;31m"
end = "\033[;0;0m"
于 2018-10-20T23:26:19.097 回答
1
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"])
于 2021-04-10T19:21:47.907 回答