Python终端打印彩色字符

我们在编写python程序时,有时会遇到一些在终端打印彩色字符的需求,特别是针对一些标识日志条目类别的单词,例如“OK”、“ERROR”、“INFO”之类的。有和我一样需求的朋友可以参考下面的做法。

  1. 实现原理
      首先,向终端输出彩色字符,色彩的设置由目标终端文字系统和转义字符控制,与具体的编程语言无关。其格式如下:

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”) # 高亮,红字,黑底

  1. 适用范围
      Windows下,命令提示符、Powershell不支持上述转义字符,通过WSL进Linux子系统能正常显示。
      Linux下一般的终端可以显示。
      Pycharm、VScode等IDE自带的终端可以显示。
  2. 函数案例
      每次都重新编辑转义字符串、查颜色表是一件很不优雅的事情。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)