如何在Python中实现类似警告/错误流的红色高亮自定义文本打印?
在stdout中打印红色高亮文本的实现方法
嘿,这个需求我太熟了!要实现像tqdm那样在终端输出红色高亮文本,核心是利用ANSI转义序列,同时要兼顾跨平台兼容性。下面给你几种不同场景下的实现方案:
1. 基础原生实现(无需第三方库)
终端支持ANSI转义码的话(比如Linux/macOS终端、Windows Terminal/PowerShell),直接用颜色控制码包裹文本即可:
- 红色前景色的起始码:
\033[31m - 重置回默认样式的码:
\033[0m(必须加,不然后续所有文本都会保持红色)
示例代码:
# 打印红色文本,后面恢复默认 print("\033[31m这是高亮的红色文本\033[0m") # 混合不同样式也可以 print("\033[31m红色\033[0m 和 \033[32m绿色\033[0m 文本")
如果是Windows传统CMD窗口,默认不支持ANSI转义码,需要先启用虚拟终端模式:
import sys if sys.platform.startswith('win'): import ctypes # 调用Windows API启用虚拟终端处理 kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) handle = kernel32.GetStdHandle(-11) # STD_OUTPUT_HANDLE mode = ctypes.c_ulong() kernel32.GetConsoleMode(handle, ctypes.byref(mode)) mode.value |= 0x0004 # ENABLE_VIRTUAL_TERMINAL_PROCESSING kernel32.SetConsoleMode(handle, mode) # 现在CMD也能显示红色文本了 print("\033[31mWindows CMD下的红色文本\033[0m")
2. 用第三方库简化操作(推荐)
如果不想自己处理跨平台逻辑,可以用成熟的终端颜色库,比如colorama或termcolor:
方案A:colorama
它专门解决Windows平台的ANSI码兼容问题,使用非常简洁:
pip install colorama
示例代码:
from colorama import init, Fore # init(autoreset=True) 会自动重置颜色,不用手动加重置码 init(autoreset=True) print(Fore.RED + "这是用colorama输出的红色文本") # 还支持背景色 print(Fore.WHITE + Back.RED + "白色字体红色背景")
方案B:termcolor
更轻量的库,直接通过函数调用指定颜色:
pip install termcolor
示例代码:
from termcolor import colored print(colored("这是用termcolor输出的红色文本", 'red')) # 可选添加样式,比如加粗 print(colored("红色加粗文本", 'red', attrs=['bold']))
3. 模拟tqdm的错误/警告流红色输出
如果你想像tqdm那样在stderr中输出红色文本,方法和stdout一致,只是输出目标换成sys.stderr:
import sys # 原生方式 sys.stderr.write("\033[31m这是stderr中的红色警告文本\033[0m\n") # 用colorama的话 from colorama import init, Fore init(autoreset=True) sys.stderr.write(Fore.RED + "stderr中的红色警告(colorama版)\n")
这些方法都能完美实现你要的红色高亮打印需求,根据自己的场景选就行~
内容的提问来源于stack exchange,提问作者Flicic
相关产品推荐
相关产品推荐

