Linux下Python實現設定終端顯示顏色、粗體、底線等效果,linuxpython
也許你希望在終端上輸出一些帶有顏色或者粗體、底線等樣式的資訊,就像man中的那樣,那麼這篇文章將會起到些許作用。
事件起因
在Python開發項目過程中,為了方便調試代碼,經常會向stdout中輸出一些日誌,預設的這些日誌就直接顯示在了終端中。
但是很雜亂的資訊顯示在一起,往往沒有重點,一個一個找我們需要的資訊往往特別複雜.
linux終端顏色設定資訊
在Linux終端中,使用逸出序列來進行如上所述的顯示,逸出序列以ESC開頭,即ASCII碼下的\033,其格式為:
\033[顯示方式;前景色彩;背景色m
顯示方式、前景色彩、背景色至少一個存在即可。
格式:\033[顯示方式;前景色彩;背景色m
說明
前景色彩 |
背景色 |
顏色 |
30 |
40 |
黑色 |
31 |
41 |
紅色 |
32 |
42 |
綠色 |
33 |
43 |
黃色 |
34 |
44 |
藍色 |
35 |
45 |
紫紅色 |
36 |
46 |
青藍色 |
37 |
47 |
白色 |
顯示方式
顯示方式 |
意義 |
0 |
終端預設設定 |
1 |
高亮顯示 |
4 |
使用底線 |
5 |
閃爍 |
7 |
反白顯示 |
8 |
不可見 |
例子
\033[1;31;40m <!--1-高亮顯示 31-前景色彩紅色 40-背景色黑色-->\033[0m <!--採用終端預設設定,即取消顏色設定-->
解決
#/usr/bin/python#-*- coding: 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 不可見## 例子:# \033[1;31;40m <!--1-高亮顯示 31-前景色彩紅色 40-背景色黑色--># \033[0m <!--採用終端預設設定,即取消顏色設定-->]]]STYLE = { 'fore': { # 前景色彩 'black' : 30, # 黑色 'red' : 31, # 紅色 'green' : 32, # 綠色 'yellow' : 33, # 黃色 'blue' : 34, # 藍色 'purple' : 35, # 紫紅色 'cyan' : 36, # 青藍色 'white' : 37, # 白色 }, 'back' : { # 背景 'black' : 40, # 黑色 'red' : 41, # 紅色 'green' : 42, # 綠色 'yellow' : 43, # 黃色 'blue' : 44, # 藍色 'purple' : 45, # 紫紅色 'cyan' : 46, # 青藍色 'white' : 47, # 白色 }, 'mode' : { # 顯示模式 'mormal' : 0, # 終端預設設定 'bold' : 1, # 高亮顯示 'underline' : 4, # 使用底線 'blink' : 5, # 閃爍 'invert' : 7, # 反白顯示 'hide' : 8, # 不可見 }, 'default' : { 'end' : 0, },}def UseStyle(string, mode = '', fore = '', back = ''): mode = '%s' % STYLE['mode'][mode] if STYLE['mode'].has_key(mode) else '' fore = '%s' % STYLE['fore'][fore] if STYLE['fore'].has_key(fore) else '' back = '%s' % STYLE['back'][back] if STYLE['back'].has_key(back) else '' style = ';'.join([s for s in [mode, fore, back] if s]) style = '\033[%sm' % style if style else '' end = '\033[%sm' % STYLE['default']['end'] if style else '' return '%s%s%s' % (style, string, end)def TestColor( ): print UseStyle('正常顯示') print '' print "測試顯示模式" print UseStyle('高亮', mode = 'bold'), print UseStyle('底線', mode = 'underline'), print UseStyle('閃爍', mode = 'blink'), print UseStyle('反白', mode = 'invert'), print UseStyle('不可見', mode = 'hide') print '' print "測試前景色彩" print UseStyle('黑色', fore = 'black'), print UseStyle('紅色', fore = 'red'), print UseStyle('綠色', fore = 'green'), print UseStyle('黃色', fore = 'yellow'), print UseStyle('藍色', fore = 'blue'), print UseStyle('紫紅色', fore = 'purple'), print UseStyle('青藍色', fore = 'cyan'), print UseStyle('白色', fore = 'white') print '' print "測試背景色" print UseStyle('黑色', back = 'black'), print UseStyle('紅色', back = 'red'), print UseStyle('綠色', back = 'green'), print UseStyle('黃色', back = 'yellow'), print UseStyle('藍色', back = 'blue'), print UseStyle('紫紅色', back = 'purple'), print UseStyle('青藍色', back = 'cyan'), print UseStyle('白色', back = 'white') print ''if __name__ == '__main__': TestColor( )
附上用於測試的C程式
/********************************************************** > File Name: test.c > Author: GatieMe > Mail: gatieme@163.com > Created Time: 2015年04月26日 星期日 11時03分48秒 *********************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>/** * * 格式:\033[顯示方式;前景色彩;背景色m * 說明: * * 前景色彩 背景色 顏色 * --------------------------------------- * 30 40 黑色 * 31 41 紅色 * 32 42 綠色 * 33 43 黃色 * 34 44 藍色 * 35 45 紫紅色 * 36 46 青藍色 * 37 47 白色 * * 顯示方式 意義 * ------------------------- * 0 終端預設設定 * 1 高亮顯示 * 4 使用底線 * 5 閃爍 * 7 反白顯示 * 8 不可見 * * 例子: * \033[1;31;40m <!--1-高亮顯示 31-前景色彩紅色 40-背景色黑色--> * \033[0m <!--採用終端預設設定,即取消顏色設定--> **/int main(void){ int left, right; while(printf("\033[31m"), /* 輸入資料紅色顯示 */ scanf("%d%d", &left, &right) != EOF) { printf("\033[1;32m%d\033[0m\n", left + right); /* 輸出資訊綠色高亮顯示 */ } return EXIT_SUCCESS;}