- \033 打印控制符解析
- \033源码控制打印
- 调用 color() 控制打印
- 在命令行模式下查看 color() 帮助文档
- color() 完整源码
- \033 VS color()
Python 有色打印指令用法示例:
\033[(打印效果);(前景色);(背景色)m…\033[0m ,“打印效果”“前景色””背景色”三个参数,可以任意缺省,缺省的就用默认值。
Python 打印控制设置可以拆分成三部分理解:
\033[ 打印控制符(不可或缺和写错)
小写 m 打印设置结束符(同样不可或缺)
\033[0m 设置打印为默认
“\033[m…\033[0m”
这个 Python 彩色打印的代码难记且难用,一不注意就是语法错误。还要记住前景色、背景色和效果代码数字,实在不好操作。
回首页
我在探究之后,码了个函数模块 python_color ,只要在 Python 彩色打印字符串生成函数 color() 参数中除要彩色打印的字符串外,依次以英文单词字符输入“前景色”“背景色”和“效果”即可(除要彩色打印的字符串外,都可以缺省,使用默认值)。真好方便,不用管我的模块函数怎么操作。
我的 color() 在命令行下的调用:
*.py 文件调用 color()
下面上一段调用代码,试试 color() 的用法:
#!/usr/bin/nve python # Linux 脚本解释器路径指定注释。
# coding: utf-8 #本脚本编码说明。
import python_color as pcolor
'''加载“ Python 好色”模块。
该模块就俩函数:color() ,colors_table()
color() ,生成 python 能有“色”打印的字符串。
colors_table() 调用函数 color()
打印 python \033[m...\033[0m
彩色打印代码表。'''
print(f'\n\n示例打印:\n\n{pcolor.color(" Python 好色", "red"):^60}\n')
#示例居中打印“ Python 好色”
print(f'\n{pcolor.color("Hello world!", "yellow", "red"):^64}\n')
#示例前景色黄色背景色红色居中打印“ Hello world!”
print(f'\n{pcolor.color("梦幻精灵_cq是重庆崽儿。", "green", "gray", "light"):^54}\n')
#示例前景色绿色背景色灰色高亮居中打印“梦幻精灵_cq是重庆崽儿。”
print(pcolor.color('直接使用默认值打印').center(55))
代码运行效果
回首页
调用代码
pcolor.colors_table() #调用函数打印“ Python 好色”效果图。
回首页
上面这张图打印代码
(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
def colors_table():
'''调用 color() 打印效果图'''
color_s = color(' Python 好色效果图', 'red', 'green', 'light')
s_033 = "\\033编码"
print(f'\n\n\n{color_s:_^57}\n\n\n\
{color("色显效果(前景色以红色为例)" , "yellow", "black", "light"):^52}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\
\n\n{color(s_033, "green") :>22}{"":>5}{color("显示效果", "green")}{"":>6}{color(" color() 单词", "green")}\n\
\n{"0" :>8}{"":>4}{color("终端默认设置", "red", "black", "default")}{"":>4}{color("default(默认)", "green")}\n\
{"1" :>8}{"":>4}{color("高亮显示", "red", "black", "light")}{"":>8}{color("light(高亮)", "green")}\n\
{"2" :>8}{"":>4}{color("低亮显示", "red", "black", "lobright")}{"":>8}{color("lobright(低亮)", "green")}\n\
{"4" :>8}{"":>4}{color("使用下划线", "red", "black", "unline")}{"":>6}{color("unline(下划线)", "green")}\n\
{"5" :>8}{"":>4}{color("闪烁", "red", "black", "flicker")}{"":>12}{color("flicker(闪烁)", "green")}\n\
{"7" :>8}{"":>4}{color("反白显示", "red", "black", "inverse")}{"":>8}{color("inverse(反白)", "green")}\n\
{"8" :>8}{"":>4}{color("消隐", "red", "black", "blanking")}{"":>12}{color("blanking(消隐)", "green")}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\n\
\
\n\n{color("前景色(背景色以黑色为例)" , "yellow", "black", "light"):^52}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\
\n\n{color(s_033, "green") :>26}{"":>4}{color("颜色", "green")}{"":>6}{color(" color() 单词", "green")}\n\
\n{"30" :>12}{"":>6}{color("黑色", "black", "blue", "default")}{"":>6}{color("black(黑色)", "green")}\n\
{"31" :>12}{"":>6}{color("红色", "red", "black", "default")}{"":>6}{color("red(红色)", "green")}\n\
{"32" :>12}{"":>6}{color("绿色", "green", "black", "default")}{"":>6}{color("green(绿色)", "green")}\n\
{"33" :>12}{"":>6}{color("黄色", "yellow", "black", "default")}{"":>6}{color("yellow(黄色)", "green")}\n\
{"34" :>12}{"":>6}{color("蓝色", "blue", "black", "default")}{"":>6}{color("blue(蓝色)", "green")}\n\
{"35" :>12}{"":>6}{color("紫色", "purple", "black", "default")}{"":>6}{color("purple(紫色)", "green")}\n\
{"36" :>12}{"":>6}{color("青色", "cyan", "black", "default")}{"":>6}{color("cyan(青色)", "green")}\n\
{"37" :>12}{"":>6}{color("灰色", "gray", "black", "default")}{"":>6}{color("gary(灰色)", "green")}\n\
{"37" :>12}{"":>6}{color("白色", "white", "black", "default")}{"":>6}{color("white(白色)", "green")}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\n\
\
\n\n{color("背景色(前景色以黑色为例)" , "yellow", "black", "light"):^52}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\
\n\n{color(s_033, "green") :>26}{"":>4}{color("颜色", "green")}{"":>6}{color(" color() 单词", "green")}\n\
\n{"40" :>12}{"":>6}{color("黑色", "blue", "black", "default")}{"":>6}{color("black(黑色)", "green")}\n\
{"41" :>12}{"":>6}{color("红色", "black", "red", "default")}{"":>6}{color("red(红色)", "green")}\n\
{"42" :>12}{"":>6}{color("绿色", "black", "green", "default")}{"":>6}{color("green(绿色)", "green")}\n\
{"43" :>12}{"":>6}{color("黄色", "black", "yellow", "default")}{"":>6}{color("yellow(黄色)", "green")}\n\
{"44" :>12}{"":>6}{color("蓝色", "black", "blue", "default")}{"":>6}{color("blue(蓝色)", "green")}\n\
{"45" :>12}{"":>6}{color("紫色", "black", "purple", "default")}{"":>6}{color("purple(紫色)", "green")}\n\
{"46" :>12}{"":>6}{color("青色", "black", "cyan", "default")}{"":>6}{color("cyan(青色)", "green")}\n\
{"47" :>12}{"":>6}{color("灰色", "black", "gray", "default")}{"":>6}{color("gary(灰色)", "green")}\n\
{"47" :>12}{"":>6}{color("白色", "black", "white", "default")}{"":>6}{color("white(白色)", "green")}\n\
\n{color(" Cut-off rule ", "black", "blue", "lobright"):.^64}\
\
\n\n\n{color(" The end ", "black", "blue", "lobright"):_^64}\n')
注意:
如上面的代码,对 Python 彩色打印的字符串进行对齐操作,控制彩色显示的代码占据了14个半角位置计算,但却没有真正显示。要记得作相应的处理,才可对打印出齐整的彩色输出。
回首页
回首页
color() 源码
#!/usr/bin/nve python # Linux 脚本解释器路径指定注释。
# coding: utf-8 #本脚本编码说明。
'''
作者:梦幻精灵_cq
QQ:479469838(八爪章鱼)
2022-2-16
'''
def color(s = '要彩色显示的字符串', fg_color = 'gray', bg_color = 'black', effect = 'default'):
'''
|
| 本函数生成“\\033[效果;前景色;背景色m
| 要彩色显的字符串\\033[0m”字符串,中间不
| 可以有空格,分号是半角分号且“必不可少”。
| 实现 python 代码彩色打印字符串。
|
| fg_color 前景色
| bg_color 背景色
| effect 显示效果
|
|
| 颜色(前/背景色)包括:
|
| 本函数颜色 颜色 \\033代码
| black 黑色 0
| red 红色 1
| green 绿色 2
| yellow 黄色 3
| blue 蓝色 4
| purple 紫色 5
| cyan 青色 6
| gray(white) 灰色(白色) 7
|
|
| 效果包括:
|
| 本函数效果 效果 \\033代码
| default 默认 0
| light 高亮(增加显示亮度) 1
| lobright 低亮(降低显示亮度) 2
| unline 下划线 4
| flicker 闪烁 5
| inverse 反白 7
| blanking 消隐(大多不用,都不显,
| 还搞什么搞😜) 8
|
|
| 可缺省参数优先级:
|
| fg_color > bg_color > effect
|
| 就是说,如果缺省一个参数,只能是效果
| (effect);缺省两个参数,一定是效果(eff-
| ect)和背景色(bg_color);三个都缺省,就
| 是本函数默认值。默认值是前景色灰色(gray/
| white)、背景色(black)、效果(default),
| 和没使用本函数一样,虽然字符串中有
| 彩色打印代码。虽然可以缺省三个参数,但
| 至少要用一个,那就是前景色,才可以彩色
| 打印。
| 要色显的字符串 s ,不可以缺省,一定
| 要有这个参数。不然会报缺少参数的错。
|
|
'''
colors = {
'black': 0,
'red': 1,
'green': 2,
'yellow': 3,
'blue': 4,
'purple': 5,
'cyan':6,
'gray': 7,
'white': 7,
'default': 0,
'light': 1,
'lobright': 2,
'unline': 4,
'flicker': 5,
'inverse': 7,
'blanking': 8
} #颜色和效果字典
fg_color = colors.get(fg_color)
bg_color = colors.get(bg_color)
effect = colors.get(effect)
return f'\033[{effect};3{fg_color};4{bg_color}m{s}\033[0m'
回首页
\033 打印控制符和 color() 优劣对比
- 优点:前者“打印效果”“前景色”“背景色”三个参数可以任意缺省;后者只能“打印效果” > “背景色” > “前景色”优先级缺省。
- 缺点:前者色彩和效果代码不易识记且易混淆;后者用英文单词(或约定写法)为函数参数,对打印进行控制,方便高效,几乎不用识记。可以无视函数内部 \033 打印控制语法,能“熟练”调用函数就可以“得心应手”控制打印。