首页 > 解决方案 > Python2.7:如何用颜色重定向文本

问题描述

我想在 Python 2.7 和 Linux 的以下代码中为文本添加颜色。

import colorama
colorama.init( strip=False )

print( colorama.Fore.RED + "Hello World!" + colorama.Fore.RESET )

文本可以在终端中以颜色打印。但是,在像“python script.py | cat”这样的管道之后,颜色会被删除。我猜 Python 根据输出 tty 删除颜色。我怎样才能实现像grep --color=alwaysand之类的行为ls --color=always

标签: pythonpython-2.7

解决方案


这在图书馆的自述文件中有明确的解释。

init()接受一些**kwargs来覆盖默认行为。

…</p>

init(strip=None)

通过TrueFalse覆盖是否应从输出中删除 ansi 代码。如果在 Windows 上或输出被重定向(不是 tty),默认行为是剥离。

init(convert=None)

传递TrueFalse覆盖是否将输出中的 ANSI 代码转换为 win32 调用。默认行为是在 Windows 上转换 if 并且输出到 tty(终端)。

假设您不在 Windows 上,那么答案是传递strip=False而不是默认传递strip=Noneinit. 这就像传递--color=always而不是默认传递给grepor ls


当然,您的代码init一开始就没有调用。你应该是,但你侥幸逃脱,因为你可能不在 Windows 上:

应用程序应使用以下方法初始化 Colorama:

from colorama import init init()

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

在其他平台上,调用init()无效(除非您请求其他可选功能;请参阅下面的“初始化关键字参数”)。按照设计,这允许应用程序init()在所有平台上无条件调用,之后 ANSI 输出应该正常工作。


推荐阅读