如何在CMD中用Python输出彩色高亮文本(无需第三方库)
在CMD中实现Python文本彩色高亮(无需第三方库)
问题场景
在Windows CMD中运行以下Python代码时,ANSI转义字符未被解析,直接显示为原始字符,无法实现文本彩色高亮效果:
原代码
def highlight(colour, text): if colour == "black": return "\033[1;40m" + str(text) + "\033[1;m" if colour == "red": return "\033[1;41m" + str(text) + "\033[1;m" if colour == "green": return "\033[1;42m" + str(text) + "\033[1;m" if colour == "yellow": return "\033[1;43m" + str(text) + "\033[1;m" if colour == "blue": return "\033[1;44m" + str(text) + "\033[1;m" if colour == "magenta": return "\033[1;45m" + str(text) + "\033[1;m" if colour == "cyan": return "\033[1;46m" + str(text) + "\033[1;m" if colour == "gray": return "\033[1;47m" + str(text) + "\033[1;m" return str(text) print(highlight("black", "Highlight: black")) print(highlight("red", "Highlight: red")) print(highlight("green", "Highlight: green")) print(highlight("yellow", "Highlight: yellow")) print(highlight("blue", "Highlight: blue")) print(highlight("magenta", "Highlight: magenta")) print(highlight("cyan", "Highlight: cyan")) print(highlight("gray", "Highlight: gray"))
错误输出
←[1;40mHighlight: black←[1;m ←[1;41mHighlight: red←[1;m ←[1;42mHighlight: green←[1;m ←[1;43mHighlight: yellow←[1;m ←[1;44mHighlight: blue←[1;m ←[1;45mHighlight: magenta←[1;m ←[1;46mHighlight: cyan←[1;m ←[1;47mHighlight: gray←[1;m
解决方法
方法1:启用CMD的ANSI转义支持
Windows 10 1511及以上版本的CMD原生支持ANSI转义序列,但默认可能未启用。只需在代码开头添加一行系统命令即可触发解析支持:
import os # 启用CMD的ANSI转义解析 os.system('') def highlight(colour, text): if colour == "black": return "\033[1;40m" + str(text) + "\033[1;m" if colour == "red": return "\033[1;41m" + str(text) + "\033[1;m" if colour == "green": return "\033[1;42m" + str(text) + "\033[1;m" if colour == "yellow": return "\033[1;43m" + str(text) + "\033[1;m" if colour == "blue": return "\033[1;44m" + str(text) + "\033[1;m" if colour == "magenta": return "\033[1;45m" + str(text) + "\033[1;m" if colour == "cyan": return "\033[1;46m" + str(text) + "\033[1;m" if colour == "gray": return "\033[1;47m" + str(text) + "\033[1;m" return str(text) print(highlight("black", "Highlight: black")) print(highlight("red", "Highlight: red")) print(highlight("green", "Highlight: green")) print(highlight("yellow", "Highlight: yellow")) print(highlight("blue", "Highlight: blue")) print(highlight("magenta", "Highlight: magenta")) print(highlight("cyan", "Highlight: cyan")) print(highlight("gray", "Highlight: gray"))
方法2:调用Windows API直接设置颜色(兼容性更好)
使用Python内置的ctypes库调用Windows控制台API,无需依赖ANSI转义字符,兼容性覆盖更多Windows版本:
import ctypes # 定义控制台前景色常量 FOREGROUND_BLACK = 0x00 FOREGROUND_RED = 0x04 FOREGROUND_GREEN = 0x02 FOREGROUND_YELLOW = 0x06 # 红+绿 FOREGROUND_BLUE = 0x01 FOREGROUND_MAGENTA = 0x05 # 红+蓝 FOREGROUND_CYAN = 0x03 # 绿+蓝 FOREGROUND_GRAY = 0x07 # 红+绿+蓝(浅灰) FOREGROUND_WHITE = 0x0F # 高亮白 # 获取标准输出控制台句柄 std_out_handle = ctypes.windll.kernel32.GetStdHandle(-11) def set_console_color(color): ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, color) def highlight(colour, text): color_map = { "black": FOREGROUND_BLACK, "red": FOREGROUND_RED, "green": FOREGROUND_GREEN, "yellow": FOREGROUND_YELLOW, "blue": FOREGROUND_BLUE, "magenta": FOREGROUND_MAGENTA, "cyan": FOREGROUND_CYAN, "gray": FOREGROUND_GRAY } # 设置指定颜色 set_console_color(color_map.get(colour, FOREGROUND_WHITE)) print(text) # 恢复默认白色 set_console_color(FOREGROUND_WHITE) highlight("black", "Highlight: black") highlight("red", "Highlight: red") highlight("green", "Highlight: green") highlight("yellow", "Highlight: yellow") highlight("blue", "Highlight: blue") highlight("magenta", "Highlight: magenta") highlight("cyan", "Highlight: cyan") highlight("gray", "Highlight: gray")
内容的提问来源于stack exchange,提问作者Issac Ong
相关产品推荐
相关产品推荐

