实际上linux终端是调用ansi控制码来实现终端彩色输出.终端的字符颜色由转义序列(escape sequence)控制,是文本模式下的系统显示功能,与具体语言无关。
转义序列以控制字符'esc'开头。该字符的ascii码十进制表示为27,十六进制表示为0x1b,八进制表示为033。多数转义序列超过两个字符,故通常以'esc'和左括号'['开头。该起始序列称为控制序列引导符(csi,control sequence intro),通常由\033[或\e[代替。
通过转义序列设置终端显示属性时,常见格式为:
\033[显示方式;前景色;背景色m输出字符串\033[0m
或
\e[显示方式;前景色;背景色m输出字符串\e[0m
其中 ,\033[0mor\e[0m用于恢复默认的终端输出属性,否则会影响后续的输出。
转义序列相关的常用参数如下(通过man console_codes命令可查看更多的参数描述):
- 显示方式:0(默认)、1(粗体/高亮)、22(非粗体)、4(单条下划线)、24(无下划线)、5(闪烁)、25(无闪烁)、7(反显、翻转前景色和背景色)、27(无反显)、8(消隐)
- 颜色:0(黑)、1(红)、2(绿)、 3(黄)、4(蓝)、5(洋红)、6(青)、7(白)
- 前景色为30 颜色值,如31表示前景色为红色;背景色为40 颜色值,如41表示背景色为红色。
此外,还有一些ansi控制码,如:na (光标上移n行 )、nb(光标下移n行 )、nc(光标右移n行 )、nd (光标左移n行 )、2j(清屏)、k(清除从光标到行尾的内容)、s(保存光标位置)、u(恢复光标位置)、?25l(隐藏光标)、?25l(显示光标)。
以下实例展示(linux用echo,pycharm使用print打印即可(但windows下pycharm仅支持\033[格式)):
1.红色字体输出:echo -e "\033[31m红色字体\033[0m"
2.多种效果叠加输出:echo -e "\033[1;4;37;41m高亮 下划线 白色字体 红色背景\033[0m"