平时自己写脚本的时候总喜欢给输出信息加点颜色,比如之前写的查找CVS diff中改动文件的脚本。方法很简单,就是输出一些ASCII控制码,比如\033[;31m
代表红色之类的。
用的多了,感觉老是拼字符串也不是个办法,索性规整了一下,写了人生中第一个正经的python模块。。。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from __future__ import print_function
__all__ = ['paint', 'colors', 'attributes']
__version__ = '1.0'
_FORMAT = '\033[{}m\033[{};{}m{}\033[0m'
colors = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white']
attributes = ['blod', 'underscore', 'blink', 'reverse', 'concealed']
_FOREGROUND = dict(zip(colors, list(range(30, 38))))
_BACKGROUND = dict(zip(colors, list(range(40, 48))))
_attributes = dict(zip(attributes, [1, 4, 5, 7, 8]))
def paint(foreground, background=None, attribute=None):
fg = _FOREGROUND.get(foreground, 39)
bg = _BACKGROUND.get(background, 49)
att = _attributes.get(attribute, 0)
return lambda s: _FORMAT.format(att, bg, fg, s)
if __name__ == '__main__':
def print_row(b):
for f in colors:
p = paint(f, b)
print(p('{:^8}'.format(f)), end=' ')
print('')
print_row(None)
for b in colors:
print_row(b)
用的时候也很方便:
p = paint(foreground, background=None, attribute=None)
p(string)
比如输出字体为绿色,背景为黄色的文字:
p = paint('green', 'yellow')
print(p('Hello World'))
可以访问我的Github查看完整代码。
最后,附一张完整的颜色图(python colorit.py
):