python - 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=always
and之类的行为ls --color=always
。
解决方案
这在图书馆的自述文件中有明确的解释。
init()
接受一些**kwargs
来覆盖默认行为。…</p>
init(strip=None)
:通过
True
或False
覆盖是否应从输出中删除 ansi 代码。如果在 Windows 上或输出被重定向(不是 tty),默认行为是剥离。
init(convert=None)
:传递
True
或False
覆盖是否将输出中的 ANSI 代码转换为 win32 调用。默认行为是在 Windows 上转换 if 并且输出到 tty(终端)。
假设您不在 Windows 上,那么答案是传递strip=False
而不是默认传递strip=None
给init
. 这就像传递--color=always
而不是默认传递给grep
or ls
。
当然,您的代码init
一开始就没有调用。你应该是,但你侥幸逃脱,因为你可能不在 Windows 上:
应用程序应使用以下方法初始化 Colorama:
from colorama import init
init()
在 Windows 上,调用
init()
将从发送到 stdout 或 stderr 的任何文本中过滤掉 ANSI 转义序列,并将它们替换为等效的 Win32 调用。在其他平台上,调用
init()
无效(除非您请求其他可选功能;请参阅下面的“初始化关键字参数”)。按照设计,这允许应用程序init()
在所有平台上无条件调用,之后 ANSI 输出应该正常工作。
推荐阅读
- r - 如何循环遍历 R 中的数据框列并将每列的分位数()作为新数据框中的一行输出
- javascript - Input入口触发的函数,需要在页面加载时触发
- ethereum - 应付合约 Tron Solidity
- java - 如何在java中从服务器读取和写入文件?
- ios - 在密码 UITextField Swift 中禁用密码自动生成
- login - 重置 Bookstack 凭据
- google-bigquery - BigQuery 仅按时间戳计算最后一项
- ethereum - 未发出任何事件 - 交换 ERC721 代币
- java - 使用 java.util.Random 在游戏中随机写入数字
- python - 使用 Flask 和 WTForms 链接表单的问题