在终端中打印多样化文字
在终端中打印多样化文字
先给出几种环境下的解决方案:
在Python中:
1 |
|
在shell中:
1 |
|
在C++中:
1 |
|
可以看出在多种环境下,解决这个问题的方案基本上没有区别,因为终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033)。
下面以字符串'\e[31;43;1mError!\e[0m'
为例说明:
开头的\e[31;43;1m
符号释义:
\e
: 代表开始ANSI Escape code- ANSI Escape code
终端用于文本字符的输入和输出,ASCII编码中有些字符是不能用来打印显示的,比如’\a’ 0x7代表响铃,’\n’ 0x0A 代表换行,这些字符被称为控制符。
在此之中,控制符 ‘\e’ 0x1B,这个字符代表 ESC ,即键盘上 ESC 按键的作用。ESC 是单词 escape 的缩写,即逃逸的意思。文本中出现这个转义字符,代表其后方的字符是ANSI Escape code编码。
ANSI Escape code编码中有专门控制字符颜色的控制符,例如:\e[37;44;4;1m - 因为 \e 控制符的16进制码为 0x1B , 8 进制码为 033 ,所以以下表示方式等价:
\e[37;44;4;1mMCC\e[0m
\x1b[37;44;4;1mMCC\x1b[0m
\x1B[37;44;4;1mMCC\x1B[0m
\033[37;44;4;1mMCC\033[0m
- ANSI Escape code
[
: 代表转义序列开始符 CSI,Control Sequence Introducer37;44;4;1
: 代表以; 分隔的文本样式控制符,其中 37 代表文本前景色为白色,44代表背景为蓝色,4代表下划线,1代表加粗。由于在 前景色、背景色、显示样式 之中没有重复的值,不会造成混淆,因此放置顺序可以自由调整。而且显示样式也可以使用多个。
m
: 代表结束控制符序列
结尾的\e[0m
字符释义
\e
: 代表开始ANSI Escape code[
: 代表转义序列开始符 CSI,Control Sequence Introducer0
: 代表重置文本样式——说明样式自定义到此结束,后边使用默认样式,不再适用前面的定义m
: 代表结束控制符序列
总结一下,解决方案分为三部分:"前缀 文本 后缀"
(中间不必有空格)
测试:
下面简要概括(搬运)一下可选的样式参数
显示方式 | 效果 | 前景色 | 背景色 | 颜色描述 |
---|---|---|---|---|
0 | 终端默认设置 | 30 | 40 | 黑色 |
1 | 高亮显示(加粗) | 31 | 41 | 红色 |
4 | 使用下划线 | 32 | 42 | 绿色 |
5 | 闪烁 | 33 | 43 | 黄色 |
7 | 反白显示 | 34 | 44 | 蓝色 |
8 | 不可见 | 35 | 45 | 紫红色 |
22 | 非高亮显示 | 36 | 46 | 青蓝色 |
24 | 去下划线 | 37 | 47 | 白色 |
25 | 去闪烁 | |||
27 | 非反白显示 | |||
28 | 可见 |
参考文章中有对可选参数十分详细的介绍,[3]中尤为详细。
参考
[1]. python中print打印显示颜色
[2]. Linux终端呈现彩色输出
[3]. 在终端中输出彩色文字
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!