在終端中,輸出的字體總是單一顏色的,黑底白字。但是在一些場景并不能很好的滿足輸出的需求,比如在大量而快速輸出中,輸出一些提示性或者警告性的信息,普通的黑底白字輸出可能或起不到作用。
本文將介紹如何輸出顏色字體到終端界面中。
# 1. ANSI 轉(zhuǎn)義序列
其實終端不僅能夠顯示程序的輸出。它可以顯示移動光標(biāo)、為文本著色、清除整個屏幕,并且不僅僅是靜態(tài)輸出。比如顏色字體或者閃爍的光標(biāo)或者是進度條。
我們通過使用特殊的輸出字符串改變終端的輸出行為,最簡單的例子便是換行這個例子:
# 2. 配色方案
有兩種配色方案廣泛應(yīng)用于終端中:
16 色 (8 背景 + 8 前景)前景即是字體本身的顏色
255 色
16 色
16色的配色方案包含兩個顏色設(shè)置,每個8色,一個是背景色一個是字體色(也即前景色),這個配色方案的語法格式如下:
首先舉一個例子 :
?33[1;32;40m
這里 ?33[ 是轉(zhuǎn)義字符 1 代表高亮,32 代表前景色為綠色,背景色為黑色
輸出到終端則是這個效果:
轉(zhuǎn)義字符
轉(zhuǎn)義字符可以有三種形式
十六進制:x16[
Unicode:u001b[
八進制:?33[
樣式
這個樣式指的是字體的顯示樣式:
0(默認(rèn)值)、1(高亮)、22(非粗體)
4(下劃線)、24(非下劃線)、 5(閃爍)
25(非閃爍)、7(反顯)、27(非反顯)
print('?33[0;32;40m這是一行測試字體?33[0m') print('?33[1;32;40m這是一行測試字體?33[0m') print('?33[22;32;40m這是一行測試字體?33[0m') print('?33[4;32;40m這是一行測試字體?33[0m') print('?33[24;32;40m這是一行測試字體?33[0m') print('?33[5;32;40m這是一行測試字體?33[0m') print('?33[25;32;40m這是一行測試字體?33[0m') print('?33[7;32;40m這是一行測試字體?33[0m') print('?33[27;32;40m這是一行測試字體?33[0m')
具體效果看下面的動圖:
需要注意的是具體的效果可能收到使用的終端的限制,目前在CMD中輸出并不會被識別,但是在window terminal中是成功的輸出以上內(nèi)容。
顏色設(shè)置
前景色: 30(黑色)、31(紅色)、32(綠色)、 33(黃色)、34(藍色)、35(洋 紅)、36(青色)、37(白色)
背景色: 40(黑色)、41(紅色)、42(綠色)、 43(黃色)、44(藍色)、45(洋 紅)、46(青色)、47(白色)
前景色,即字體顏色的展示:
print('?33[1;30;40m這是一行黑色測試字體?33[0m') print('?33[1;31;40m這是一行紅色測試字體?33[0m') print('?33[1;32;40m這是一行綠色測試字體?33[0m') print('?33[1;33;40m這是一行黃色測試字體?33[0m') print('?33[1;34;40m這是一行藍色測試字體?33[0m') print('?33[1;35;40m這是一行洋紅測試字體?33[0m') print('?33[1;36;40m這是一行青色測試字體?33[0m') print('?33[1;37;40m這是一行白色測試字體?33[0m')
背景色:
print('?33[1;37;40m這是一行黑色測試背景?33[0m') print('?33[1;37;41m這是一行紅色測試背景?33[0m') print('?33[1;37;42m這是一行綠色測試背景?33[0m') print('?33[1;37;43m這是一行黃色測試背景?33[0m') print('?33[1;37;44m這是一行藍色測試背景?33[0m') print('?33[1;37;45m這是一行洋紅測試背景?33[0m') print('?33[1;37;46m這是一行青色測試背景?33[0m') print('?33[1;37;47m這是一行白色測試背景?33[0m')
Colorama 一個顏色輸出的模塊
每次輸入輸出都需要如此配置是非常麻煩的事,Colorama 提供方便的字體顏色輸出的配置
fromcoloramaimportinit,Fore,Back,Style #InitializesColorama init(autoreset=True) print(Style.BRIGHT+Back.YELLOW+Fore.RED+"fromcoloramaimportinit,Fore,Back,Style #InitializesColorama init(autoreset=True) print(Style.BRIGHT+Back.YELLOW+Fore.RED+"Colorama")")
簡單的變色函數(shù)
background_color_dict={ 'BLACK':40, 'RED':41, 'GREEN':42, 'YELLOW':43, 'BLUE':44, 'MAGENTA':45, 'CYAN':46, 'WHITE':47 } text_color_dict={ 'BLACK':30, 'RED':31, 'GREEN':32, 'YELLOW':33, 'BLUE':34, 'MAGENTA':35, 'CYAN':36, 'WHITE':37 } style_dict={ 'normal':0, 'bold':1, 'light':2, 'italicize':3, 'underline':4, 'blink':5 } defset_text_color(str_text,style,text_color,background_color): str=str_text style_code=style_dict[style] text_color_code=text_color_dict[text_color] back_color_code=background_color_dict[background_color] print_text=f'?33[{style_code};{text_color_code};{back_color_code}m{str}?33[0m' returnprint_text
256色
256色的輸出格式和16色的有點不一樣
轉(zhuǎn)義字符和上面的是一樣的:
十六進制:x16[
Unicode:u001b[
八進制:?33[
標(biāo)注顯示模式則是38或者48選擇一個表名后面顏色代碼是前景色還是背景色。
如果想要同時修改,則使用兩個這樣的語句即可:
print("?33[48;5;160m?33[38;5;231m背景前景修改ABCDE?33[38;5;226m前景修改ABCDE?33[0;0m")
輸出一下所有的前景顏色
defprint_colors_256(color_code): num1=str(color_code) num2=str(color_code).ljust(3,'') ifcolor_code%16==0: return(f"?33[38;5;{num1}m{num2}?33[0;0m ") else: return(f"?33[38;5;{num1}m{num2}?33[0;0m") print("256colorscheme:") print('',end='') print(''.join([print_colors_256(x)forxinrange(256)]))
這個效果可能和你的終端輸出不一致,這可能是因為我們的終端使用了不同的主題,對顏色有著不同的修改。
-
屏幕
+關(guān)注
關(guān)注
6文章
1189瀏覽量
55712 -
終端
+關(guān)注
關(guān)注
1文章
1107瀏覽量
29800 -
界面
+關(guān)注
關(guān)注
0文章
59瀏覽量
15601
原文標(biāo)題:一個 print 函數(shù),挺會玩???
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論