Python终端如何输出彩色字体
实现过程:
终端的字符颜色是用ANSI转义序列(ANSI escape sequences)控制的,是文本模式下的系统显示功能,和具体的语言无关。
转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033)。
书写格式:
开头部分:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m
开头部分:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m
注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个;另外由于表示三个参数不同含义的数值都是唯一的没有重复的,所以三个参数的书写先后顺序没有固定要求,系统都能识别;但是,建议按照默认的格式规范书写。
对于结尾部分,其实也可以省略,但是为了书写规范,建议\033[***开头,\033[0m结尾。
补充知识:
[1] ANSI转义序列(ANSI escape sequences)是一种带内信号(英语:In-band signaling)的转义序列标准,
用于控制文本显示器终端上的光标位置、颜色和其他选项。
在文本中按照规定的字节序列,大部分以ESC转义字符和"["字符开始,终端会把这些字节序列解释为相应的指令,而不是普通的字符编码。
[2] ANSI序列是在二十世纪七十年代引入的标准,用以取代特定于终端供应商的序列,并在二十世纪八十年代早期开始在计算机设备市场上广泛使用。
与早期缺少光标移动功能的系统相比,新生的电子公告板系统使用ANSI序列改进其显示。正是因为这个原因,ANSI序列变成了所有制造商共同采用的标准。
在21世纪,尽管硬件文本终端已经越来越少了,但ANSI标准依然存在,因为大多数终端模拟器会对部分ANSI转义序列进行解释。
一个值得注意的例外是,在微软Windows 10更新TH2之前,Windows操作系统的Win32控制台是不支持ANSI转义序列的。
[3] 初始的规格只有8种颜色,即(黑、红、绿、黄、蓝、品红、青、白 )。
SGR参数30-37选择前景色,40-47选择背景色。
相当多的终端将“粗体”(SGR代码1)实现为更明亮的颜色而不是不同的字体,从而提供了8种额外的前景色,但通常情况下并不能用于背景色,虽然有时候反显(SGR代码7)可以允许这样。
例如:在白色背景上显示黑色文字使用ESC[30;47m,显示红色文字用ESC[31m,显示明亮的红色文字用ESC[1;31m。
重置为默认颜色用ESC[39;49m(某些终端不支持),重置所有属性用ESC[0m。
后来的终端新增了功能,可以直接用90-97和100-107指定“明亮”的颜色。
数值表示的参数含义:
显示方式: 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、 5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(品红)、36(青色)、37(白色)
背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(品 红)、46(青色)、47(白色)
前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(品红)、36(青色)、37(白色)
背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(品 红)、46(青色)、47(白色)
常见开头格式:
\033[0m 默认字体正常显示,不高亮
\033[31;0m 红色字体正常显示
\033[1;32;40m 显示方式: 高亮 字体前景色:绿色 背景色:黑色
\033[0;31;46m 显示方式: 正常 字体前景色:红色 背景色:青色
示例:
(1)print("\033[1;31;43m您输入的帐号或密码错误!\033[0m")
上方代码的输出格式为:字体高亮,红色前景,黄色背景 PS:前景色也就是字体的颜色
(2)print("\033[0;31m%s\033[0m" % "输出红色字符")
#上方代码的输出格式为:字体默认,红色前景
(3)print("\033[5;35;46m 三个属性同时配置,闪烁,前景色-品红,背景色-青色 \033[m")
应用样例:
小伙伴们可能会说,这个配色实际有什么用,其实用的地方有很多,我们熟悉的股票交易终端,大多数用的这种语法格式实现。
这里分享一个日常运维工作中,内部监控服务的使用样例:
推荐:
python终端个性化输出组件:https://github.com/Textualize/rich
python终端表格格式化输出模块:https://github.com/jazzband/prettytable
参考:
https://github.com/adrg/splash-py
https://zhuanlan.zhihu.com/p/369282152
https://zh.wikipedia.org/wiki/ANSI%E8%BD%AC%E4%B9%89%E5%BA%8F%E5%88%97