[31m 文本而不是颜色的输出

output of [31m text instead of color

我正在尝试使用 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 时是否可以打印颜色,或者这根本不可能?

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

如果您希望 cmd.exe 本机解释这些内容,那么关于超级用户的这个主题可能会有所帮助 http://superuser.com/questions/413073/windows-console-with-ansi-colors-handling/

因此纯蜡笔可能无法在 Windows 的 cmd.exe 下使用。

但是根据 colorama 的文档

其结果是提供了一个简单的跨平台 API 用于从 Python 打印彩色终端文本使用 ANSI 序列在 Linux 或 Mac 上生成彩色输出现在也可以在 Windows 上工作,只需调用 colorama.init().

尝试使用 ConEmu。你或许可以做到

在 Windows 上,您必须使用 colorama.init() 初始化 Colorama(见第二行):

from colorama import Fore, Back, Style
colorama.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 docs:

On Windows, calling init() will filter ANSI escape sequences out of any text sent to stdout or stderr, and replace them with equivalent Win32 calls.

On other platforms, calling init() has no effect (unless you request other optional functionality; see “Init Keyword Args”, below). By design, this permits applications to call init() unconditionally on all platforms, after which ANSI output should just work.