【问题标题】:output of [31m text instead of color[31m 文本而不是颜色的输出
【发布时间】:2018-05-06 01:22:20
【问题描述】:

我正在尝试使用 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 我正在使用 Windows 和最新版本的 colorama。我只是使用:Pyinstaller -F color.py

标签: python terminal ansi-colors


【解决方案1】:

在 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(),之后 ANSI 输出应该正常工作。

【讨论】:

    【解决方案2】:

    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。你也许能做到

    【讨论】:

    • 如果我在笔记本电脑上运行它可以打印彩色文本吗?你能举个例子吗?听起来很有趣。
    • 我没有在windows上测试过。如果不是conemu,还有其他包
    • 我明白了。我认为这会使颜色在我的电脑上工作,但如果我在另一个外部依赖项上使用它,则需要安装这不是很理想。
    • 如果您将它用于生产级软件,这有点不合适,因为您需要将其添加为外部依赖项。对于单机来说,这似乎是个好主意
    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2014-08-23
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多