在Python终端输出颜色和在Linux下输出颜色是一样的,这两个终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。
转义字符格式为:
\033[{mode};{fore};{back}m
其中花括号内要填写具体的数值常量,它影响的是转义字符后的所有文字,其中每个参数之间用分号隔开。
另外,每个参数都可以省略,表示承接之前的参数。例如,如果要省略back参数,只需要|033[{mode};{fore}m
即可;如果要省略mode参数,则使用\033[;{fore};{back}m
,以此类推。
其中mode表示显示模式(有六种),fore和back分别表示前景色和背景色(一般有8种,占据了3x和4x,但有的说还有一些颜色在9x上),具体的效果可以查看这个问题:
How to print colored text in terminal in Python?
摘自上面的问题的答案,通过运行下面的Python代码可以看到所有的效果
def print_format_table():
"""
prints table of formatted text format options
"""
for style in range(8):
for fg in range(30,38):
s1 = ''
for bg in range(40,48):
format = ';'.join([str(style), str(fg), str(bg)])
s1 += '\x1b[%sm %s \x1b[0m' % (format, format)
print(s1)
print('\n')
print_format_table()
在win平台的cmd下运行会发现转义字符不起作用,是因为cmd没有实现这个转义的规范,而是需要借助win32 API,具体解释可以参考Linux终端和win32控制台文本颜色输出
在Python下的实现方式可以查看Python实现修改Windows CMD命令行输出颜色(完全解析),通过使用ctypes
这个内置库来运行
最后,为了在Python下无脑兼容各个平台,我写了一个库colorprint,通过判断终端环境和平台来调用不同的输出方法,比较方便,而且目前测试效果良好,使用方式:
安装
pip install colorprint
展示示例:
from colorprint.example import printall
printall()
使用方法和print函数几乎完全一致,但添加了返回方法本身的返回值,可以通过叠加括号不断的输出:
from colorprint.printer import uprint
from colorprint.unicolor import *
uprint("FOREGROUND_GREEN\n", fore=FOREGROUND_GREEN)
uprint("BACKGROUND_WHITE\n", back=BACKGROUND_WHITE)
uprint("MODE_NORMAL\n", mode=MODE_NORMAL)\
("MODE_BLINK\n", mode=MODE_BLINK)\
("MODE_BOLD\n", mode=MODE_BOLD)\
("MODE_HIDE\n", mode=MODE_HIDE)\
("MODE_INVERT\n", mode=MODE_INVERT)\
("MODE_UNDERLINE\n", mode=MODE_UNDERLINE)
更多特性和后续更新可以查看项目的说明文档