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

时间:2017-11-22 10:33:16

标签: python terminal ansi-colors

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

2 个答案:

答案 0 :(得分:8)

在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

  

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

     

在其他平台上,调用init()无效(除非您请求其他可选功能;请参阅下面的“Init Keyword Args”)。通过设计,这允许应用程序在所有平台上无条件地调用init(),之后ANSI输出应该正常工作。

答案 1 :(得分:3)

Windows的cmd.exe不支持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。你或许可以做到这一点