Python 中如何在终端打印彩色文字?

Python 终端彩色输出:ANSI 转义码(\033[91m 红色 \033[0m 重置)原生支持;colorama 库跨平台(含 Windows);rich 库功能最全。本文介绍各种方案。

最佳实践
Python 中如何在终端打印彩色文字?封面

原生方式:用 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 输出。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台