[31m文本输出颜色错误

14

我正在尝试使用colorama打印彩色文本,但是当我编译一个exe并运行以下代码时...

from colorama import Fore, Back, Style
print(Fore.RED + 'text')
print(Back.GREEN + 'and with a green background')
print(Style.DIM + 'and in dim text')
print(Style.RESET_ALL)
print('back to normal now')
I get output of::

输出:

[31mtext
[0m
back to normal now

在使用pyinstaller创建exe文件时,是否可以打印彩色文本?或者说这根本不可能?


有些东西正在丢失或忽略转义字符,但您需要告诉我们更多关于您如何运行它,以便让我们弄清楚为什么会发生这种情况。首先,安装在哪个平台上的colorama版本是哪个? - tripleee
1
@tripleee 我正在使用Windows和最新版本的colorama。我只需使用:Pyinstaller -F color.py - user8900239
2个回答

18

在 Windows 上,您需要使用 colorama.init() 进行初始化 Colorama(请参见第二行):

在Windows上,您需要使用colorama.init()进行初始化Colorama(请参见第二行):

from colorama import init, Fore, Back, Style
init()
print(Fore.RED + 'text')
print(Back.GREEN + 'and with a green background')
print(Style.DIM + 'and in dim text')
print(Style.RESET_ALL)
print('back to normal now')

我已经在cmdPowerShell中测试了这段代码,并且它会产生预期的彩色输出。

来自Colorama文档

在Windows上,调用init()将过滤掉发送到stdoutstderr的任何文本中的ANSI转义序列,并将它们替换为等效的Win32调用。

在其他平台上,调用init()没有任何效果(除非您请求其他可选功能;请参见“Init关键字参数”)。按设计,这允许应用程序在所有平台上无条件地调用init(),之后 ANSI 输出应该可以正常工作。


3

Windows的cmd.exe不支持ANSI转义序列。

如果您想要在cmd.exe中本地解释这些内容,可以参考superuser上的这个主题: http://superuser.com/questions/413073/windows-console-with-ansi-colors-handling/

因此,在Windows的cmd.exe下,纯粹的彩色可能无法正常工作。

然而根据colorama的文档所述:

这将提供一个简单的跨平台API,从Python中打印带颜色的终端文本,并且有一个愉快的副作用,即现有应用程序或库使用ANSI序列在Linux或Mac上生成带颜色的输出,现在也可以在Windows上工作,只需调用colorama.init()。

尝试使用ConEmu。它可能能够做到。


这个程序能打印彩色文字吗?如果我在我的笔记本电脑上运行,它也会起作用吗?你能提供一个例子吗?听起来很有趣。 - user8900239
我还没有在Windows上测试过它。如果不是ConEmu,还有其他的软件包。 - bigbounty
我明白了。我想这会让我的电脑上的颜色正常显示,但如果我在另一个外部依赖项上使用它,就需要安装其他组件,这并不是很理想。 - user8900239
如果您将其用于生产级别的软件,则似乎不是很合适,因为您需要将其作为外部依赖项添加。但对于独立运行的软件来说,这似乎是一个不错的想法。 - bigbounty

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