我们在编写python程序时,有时会遇到一些在终端打印彩色字符的需求,特别是针对一些标识日志条目类别的单词,例如“OK”、“ERROR”、“INFO”之类的。有和我一样需求的朋友可以参考下面的做法。
首先,向终端输出彩色字符,色彩的设置由目标终端文字系统和转义字符控制,与具体的编程语言无关。其格式如下:
print("\033[文字效果;前景色;背景色m文字内容\033[0m")
下面说明一下上面的参数如何设置:
参数名称 | 参数值 |
---|---|
文字效果 | 0:终端默认,1:高亮,4:下划线,5:闪烁,7:反白显示 |
前景色 | 30(黑),31(红),32(绿),33(黄),34(蓝),35(紫),36(青),37(灰) |
背景色 | 40(黑),41(红),42(绿),43(黄),44(蓝),45(紫),46(青),47(灰) |
给出2个例子,大家参考一下,更多的可以自己尝试:
print("\033[0;31;44mHello world!\033[0m") # 不高亮,红字,蓝底
print("\033[1;31;40mHello world!\033[0m") # 高亮,红字,黑底
Windows下,命令提示符、Powershell不支持上述转义字符,通过WSL进Linux子系统能正常显示。
Linux下一般的终端可以显示。
Pycharm、VScode等IDE自带的终端可以显示。
每次都重新编辑转义字符串、查颜色表是一件很不优雅的事情。Python有一些封装好颜色字符库可以使用。我这里只是自己简单封装了一下,主要用于打印服务器日志记录,提供高亮黑底状态下的红、黄、绿、白字显示,并且可以选择是否在字符串开头打印时间戳,仅供参考。
import time
# 打印彩色字符
def colormsg(msg: str, color: str = "", timestamp: bool = True):
str = ""
if timestamp:
str += time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + " "
if color == "red":
str += "\033[1;31;40m"
elif color == "green":
str += "\033[1;32;40m"
elif color == "yellow":
str += "\033[1;33;40m"
else:
print(str + msg)
return
str += msg + "\033[0m"
print(str)
给出几个使用示例:
colormsg("[ERROR]网络连接异常!", "red")
colormsg("[OK]认证成功!", "green")
colormsg("[INFO]远程连接已关闭", "yellow")
colormsg("Hello World!", timestamp=False)