Python 中如何在终端打印彩色文字?
Python 终端彩色输出:ANSI 转义码(\033[91m 红色 \033[0m 重置)原生支持;colorama 库跨平台(含 Windows);rich 库功能最全。本文介绍各种方案。
原生方式:用 ANSI 转义码——\033[颜色码m 开头、\033[0m 结尾重置。Windows 兼容性用 colorama 库,富文本需求用 rich 库。
方法一:ANSI 转义码(零依赖)
def colored(text, color):
colors = {
"red": "\033[91m",
"green": "\033[92m",
"yellow": "\033[93m",
"blue": "\033[94m",
"cyan": "\033[96m",
}
return f"{colors[color]}{text}\033[0m" # \033[0m 重置颜色
print(colored("错误信息", "red"))
print(colored("成功", "green"))
Linux/macOS 终端原生支持;Windows 新版终端也支持。
方法二:colorama(跨平台)
pip install colorama
from colorama import init, Fore, Style
init() # Windows 下必需
print(Fore.RED + "红色文字")
print(Fore.GREEN + "绿色" + Style.RESET_ALL)
方法三:rich(功能最全)
pip install rich
from rich import print as rprint
rprint("[bold red]错误[/bold red] 操作失败")
rprint("[green]成功[/green] 任务完成")
支持表格、进度条、语法高亮等,适合 CLI 工具开发。
注意:输出到文件/管道时
ANSI 码写进日志文件会变成乱码(^[[91m)。判断是否是终端:
import sys
if sys.stdout.isatty():
print(colored("红色", "red"))
else:
print("普通输出") # 重定向/管道时不用颜色
常见问题(FAQ)
Q:logging 的输出能带颜色吗?
A:可以,给 StreamHandler 自定义 Formatter 包一层 ANSI 码;或用 colorlog 库开箱即用。
Q:颜色码都有哪些?
A:前景 30-37(标准色)、90-97(亮色),背景 40-47、100-107;\033[1m 加粗。
Q:Jupyter 里彩色输出?
A:Jupyter 支持 ANSI 码渲染;也可以直接用 IPython 的 HTML 输出。