最近测试 sdk 的打点功能,需要通过日志来测试客户端上报的信息是否正确,不同的打点类型有不同的关键词,于是写了个脚本来高亮这些关键词,在终端看日志时不那么痛苦了,,Ծ‸Ծ,,
config = {
'tag': 'color'
}
alias logcolor='python -u PATH_TO_SCRIPT/logcolor.py'
alias grep='grep --color --line-buffered'
>your_command | logcolor
"""
格式:\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)