用print打印带颜色的字符串

2019年9月6日 / 72次阅读 / Last Modified 2019年11月21日
内置函数

默认情况下,控制终端的显示都是黑底白字,Python的print函数,默认打印出来的字符串,也都是黑底白字。我们也很熟悉Linux下各种命令有时候能够打印出带颜色的字符串,这让我们在使用的时候,更加容易辨识某些重要的信息。特别是在海量打印信息在屏幕上不断滚动的情况下,颜色可以起到很关键的辨识作用。Python的print函数,也可以实现打印带颜色的字符串,本文介绍这个特性。

其实这个特性来自于古老的文本模式的显示器,那个时候显示器只能显示字符,80x25,每个字符用两个byte来控制,前一个是ASCII,后一个用来控制显示方式,即颜色,背景,闪烁,高亮特性。

字符串前面只要设置一组特定的控制颜色的子串,就可以实现这个需求。这个控制颜色的子串的格式是:\033[a;b;cm,其中 a,b,c 是可以修改的数字(下文解释),m不能动,作为结束符。默认的颜色显示方式为 \033[0m 。在修改了显示颜色之后,必须要使用默认的显示方式恢复,否则后面的打印全部都会采用您设置的颜色。

测试代码:

>>> def textcolor(code='0'):
...     return '\033[%sm'%code
...
>>> print(textcolor('1;32;41')+'www.pynote.net'+textcolor())
www.pynote.net
>>> print(textcolor('4;34;47')+'www.pynote.net'+textcolor())
www.pynote.net
>>> print(textcolor('5;35;40')+'www.pynote.net'+textcolor())
www.pynote.net

网页上展示代码,看不出颜色效果,我只能截个图给大家看看了:

print打印带颜色字符串效果
print打印带颜色字符串效果

还有闪烁效果!

下面介绍上文提到的abc三个位置的数字都代表什么含义:a 显示方式,b前景色,c背景色。

a显示方式           意义
----------------------------------
0                终端默认设置
1                高亮显示
22         非高亮显示
4                使用下划线
24         去下划线
5                闪烁
25         去闪烁
7                反白显示
27         非反显
8                不可见
28         可见

下面是颜色选项,注意同样的颜色,前景色和背景色使用不同的编码。

b前景色     c背景色       颜色
---------------------------------------
30            40          黑色
31            41          红色
32            42          绿色
33            43          黃色
34            44          蓝色
35            45          洋红
36            46          青色
37            47          白色

以上显示方式和颜色,本人没有做过全部的测试验证。本文的测试代码,在Win7的console中测试无效,如果要考虑兼容性,可以考虑判断os系统的类型,然后按不同os类型,textcolor函数返回颜色子串或空。判断os类型的方式如下:

import os

def textcolor(code='0'):
    if os.name == 'nt': 
        return ''
    return '\033[%sm'%code

适当的在自己的代码的print显示中,加入一点点颜色,还是很不错的。

-- EOF --

本文链接:https://www.pynote.net/archives/1074

留言区

《用print打印带颜色的字符串》有1条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    print函数调用的是对象的__str__()魔法函数,跟str()函数一样。 [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top