我已经安装了 colorama 库并用 python 3.12 编写它。然后,我尝试使用 colorama 但它没有按预期工作。
当然,首先我导入了 init 和 Fore。然后我输入了 init()。之后我写了 print(Fore.RED +"some red text")。它给出了这个随机的单词和字母字符串。 [31msome 红色文本 阅读一些帖子后,我使用了 init(convert=True)。尽管如此,颜色还是没有改变。我想找到一种方法来快速绕过这个错误。
看到的是 ANSI 转义序列,而不是颜色。需要在的终端(例如 cmd、powershell 或 bash)中启用 ANSI 代码,以便它们能够被正确解释。
虽然
init(convert=True)
在 Windows 上可以将 ANSI 代码转换为 win32 调用,使其在 cmd 中工作,但它在 IDE 或其他可能不支持 win32 调用的终端中可能无法正常工作。
为了确保 Colorama 即使在不支持 ANSI 代码的终端中也能正常工作,可以使用
colorama.ansi.AnsiToWin32()
流包装器。它会拦截 ANSI 转义序列,并将它们转换为相应的 win32 调用。
以下是使用
colorama.ansi.AnsiToWin32()
的示例代码:
import colorama
from colorama import Fore
from colorama.ansi import AnsiToWin32
colorama.init()
# 创建一个 AnsiToWin32 流包装器
stream = AnsiToWin32(colorama.initialise.wrapped_stdout)
# 使用 print 函数和流包装器输出彩色文本
print(stream.write(Fore.RED + "some red text" + Fore.RESET), flush=True)
解释:
-
导入必要的模块:
我们导入
colorama
、Fore
和AnsiToWin32
。 -
初始化 Colorama:
使用
colorama.init()
初始化库。 -
创建 AnsiToWin32 流包装器:
我们使用
AnsiToWin32(colorama.initialise.wrapped_stdout)
创建一个流包装器,它将拦截并转换 ANSI 转义序列。 -
使用流包装器输出彩色文本:
我们使用
print
函数和流包装器 (stream.write()
) 输出彩色文本。flush=True
参数确保立即输出文本,而不是将其缓冲。
通过这种方式,即使终端本身不支持 ANSI 代码,Colorama 也能正常工作。
标签:python,colorama From: 77957036