ANSI转义码在Python解释器上不起作用。

3

我的Python解释器无法使用ANSI代码

我想在项目中给一些输出着色,于是我查找了如何给打印字符上色,并找到了ANSI转义码。然后我尝试在解释器上使用,但它不起作用。

例如:

print("\033[32m Hello")

这段代码给我显示了一个带有箭头向左标识<-[32m Hello

如何让它工作?它能在Python解释器中使用吗?如果不能,在哪里可以使用?


4
我无法重现这个问题。当我把print("\033[32m Hello")放入一个名为test.py的文件中,并在Unix终端中运行python2 test.pypython3 test.py时,我会看到绿色的Hello输出。尽管在CP437编码中,\033代表左箭头。你是在Windows系统上进行操作吗?如果是,请确保已经手动安装了用于解释ANSI转义序列的Windows软件。 - that other guy
1
可能是你的终端应用不支持它?你正在使用什么终端应用程序? - Sam Daniel
3
Python解释器与ANSI转义序列无关。听起来你正在使用Windows操作系统,因此你需要安装一些支持Windows控制台的东西。 - martineau
2
@martineau,Shell不在应用程序和终端之间的I/O路径中。 - Barmar
1
@martineau,实际上,内置终端(或Windows术语中的“控制台”)并非由cmd.exe提供,而是由控制台宿主(conhost.exe)和客户端服务器运行时系统服务(csrss.exe)的组合提供。请参阅 https://www.howtogeek.com/howto/4996/what-is-conhost.exe-and-why-is-it-running/。 - Michael Butscher
显示剩余10条评论
3个回答

1
注意,这是与此问题的一个可能重复,由此帖子回答。为了方便起见,下面发布了@gary-vernon-grubb答案重述


使用os.system('')确保ANSI转义序列被正确处理。下面是在Windows命令提示符中的示例:

An example of ANSI codes being improperly processed and then properly processed after running the command os.system('').

确保ANSI转义序列和颜色代码之间没有空格!这对我来说有点麻烦。


0

你可能正在使用IDLE...在这种情况下,你不能使用ANSI颜色;IDLE的“终端”实际上并不是一个终端,因此无论你输入chr(0x1B)\033还是\x1b,ANSI代码都会显示为一个字符;它们都是一样的。

你的箭头字符是正常的;我只看到一个方框,因为默认字体可能不支持左箭头...?

但是@thatotherguy的解释可能是正确的...除非你正在使用IDLE,因为在这种情况下,这肯定是问题所在。


0

最好安装其他软件包来帮助生成ANSI序列,如果我没记错的话,win32控制台不支持本地ANSI颜色。其中一个选项是安装colorama。以下代码片段将打印出红色文本。

import colorama
from colorama import Fore, Back, Style
colorama.init()
print(Fore.RED + 'This is red')

编辑:经过进一步的研究,我意识到Windows 10 支持 ANSI转义序列,并且您可以通过调用来实现。如果您打算复制和粘贴,请使用this

import os
os.system("echo [31mThis is red[0m")

不过我仍然更喜欢前者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接