log color

最近测试 sdk 的打点功能,需要通过日志来测试客户端上报的信息是否正确,不同的打点类型有不同的关键词,于是写了个脚本来高亮这些关键词,在终端看日志时不那么痛苦了,,Ծ‸Ծ,,

  1. how to use
  2. logcolor.py ```python #!/usr/bin/env python # encoding: utf-8

"""
格式:\033[显示方式;前景色;背景色 m]

前景色 背景色 颜色


30 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色

显示方式 意义


0 终端默认设置
1 高亮显示
4 使用下划线
5 闪烁
7 反白显示
8 不可见
"""

import sys
import signal

config = {
'tag0': '37;42',
'tag1': '37;43',
'tag2': '37;44',
}

def color_line(line):
for key, value in config.items():
line = line.replace(key, '\033[1;%sm%s\033[0m' % (value, key))

return line

def exit_gracefully(signal, frame):
sys.exit(0)

if name == 'main':
signal.signal(signal.SIGINT, exit_gracefully)
#for line in sys.stdin:
for line in iter(sys.stdin.readline, ''):
print(color_line(line.rstrip()))
sys.stdout.flush()


3. 说明
    * grep - -line-buffered参数
    man grep 对该参数解释如下: ``` Force output to be line buffered.  By default, output is line buffered when standard output is a terminal and block buffered otherwise.```
    如果输出是std out的话,默认是带line-buffered的,否则输出会有缓冲(一般4096 bytes,和系统有关)。这样,如果  ``` >some_command | grep tag | logcolor ``` 时会明显感觉到输出有延时,所以grep需要line-buffered参数,  ```>some_command | grep --line-buffered tag | logcolor ```  。
    *  python 的```for line in sys.in ```
    直接使用``` for line in sys.in```,会导致和前面说的一样的延时问题,具体讨论在https://bugs.python.org/issue3907 ,所以改用```for line in iter(sys.stdin.readline, '')``` 。

本文首发自Qtest360公众号,只放干货,欢迎关注~
![](/photo/2016/ad3da5adc6d5e435afad2affb31d0b0f.jpg)


↙↙↙阅读原文可查看相关链接,并与作者交流