HOWTO · Python

Python 列印彩色文字

本文演示瞭如何在 Python 中列印彩色文字。

本頁內容

本指南說明如何使用 Python 在終端機列印彩色文字。print() 會將文字寫入輸出串流;嵌入文字中的 ANSI 轉義序列,會向支援這些序列的終端機要求變更格式。終端機可能會將這些序列呈現為色彩,但記錄檔、IDE 面板或其他輸出目的地可能會直接顯示代碼。若要了解背景色及其他終端機控制方式,請參閱 ANSI 轉義碼和Python 中的色彩指南。

終端機色彩代碼的運作方式

ANSI 色彩序列以跳脫字元(\033)開頭,並包含用來選擇前景色、背景色或樣式的數值參數。例如,\033[31m 會要求將前景文字設為紅色,而 \033[0m 則會要求重設。這些控制字元由終端機解讀;Python 本身不會替字串上色。支援情況取決於終端機以及輸出的目的地,因此無法保證每個主控台或重新導向的檔案都會顯示彩色文字。

重設很重要,因為訊息列印後,終端機格式可能仍維持啟用狀態。在每段彩色文字的末尾重設格式,可避免同一個終端機工作階段中的後續文字沿用該格式。

使用 ANSI 轉義碼列印彩色文字

定義具名常數,讓序列更容易重複使用和修改。這個完整範例會列印三則訊息,並在每則訊息後重設格式。此處提供的是程式碼,並未宣稱已執行範例或取得執行結果。範例程式碼中的訊息文字維持英文。

執行以下範例:
本節中的程式碼以及顯示的標籤或輸出仍為英文。

class Colors:
    GREEN = "\033[92m"
    YELLOW = "\033[93m"
    RED = "\033[91m"
    RESET = "\033[0m"

print(Colors.GREEN + "File Saved Successfully!" + Colors.RESET)
print(Colors.YELLOW + "Warning: Are you sure you want to continue?" + Colors.RESET)
print(Colors.RED + "Unable to delete record." + Colors.RESET)

若要調整範例,可將某個色彩常數換成另一個受支援的 ANSI 序列。你也可以直接在字串中放入序列,或使用 f-string;這些只是不同的格式撰寫方式,不會改變哪些終端機能解讀該序列。程式碼可以直接選取、複製和編輯。

使用 Colorama 支援 Windows

ANSI 的呈現方式取決於終端機環境。在 Windows 上,colorama 可能有助於讓輸出 ANSI 序列的應用程式在受支援的主控台中運作,但實際情況仍取決於主控台和輸出目的地。請在執行腳本的環境中使用 python -m pip install colorama(或 python3 -m pip install colorama)安裝套件;這些是 Shell 命令,不是 Python 陳述式。

以下完整範例會處理選用套件尚未安裝的情況。若套件已安裝,範例會初始化 Colorama,並將前景色與明亮樣式組合使用。此範例在此處並未執行;使用套件的程式分支需要先安裝 Colorama。程式碼中的訊息文字維持英文。
本節中的程式碼以及顯示的標籤或輸出仍為英文。

try:
    import colorama
    from colorama import Fore, Style
except ImportError:
    print("Install colorama with: python -m pip install colorama")
else:
    colorama.init()
    print(Fore.BLUE + Style.BRIGHT + "This is the color of the sky" + Style.RESET_ALL)
    print(Fore.GREEN + "This is the color of grass" + Style.RESET_ALL)
    print(Fore.BLUE + Style.DIM + "This is a dimmer version of the sky" + Style.RESET_ALL)
    print(Fore.YELLOW + "This is the color of the sun" + Style.RESET_ALL)

Colorama 透過 Fore 提供前景色常數,並透過 Style 提供文字樣式。Style.RESET_ALL 會重設目前啟用的 ANSI 樣式;Fore.RESET 則只重設前景色。實際顯示效果會因終端機而異。

重設色彩及其他終端機樣式

使用原始 ANSI 序列時,請在彩色文字後附加重設序列,例如 \033[0m。範例使用具名的 RESET 常數代表該序列,讓每則訊息的格式都能自行完整設定。若省略重設,後續輸出可能會保留所選色彩或樣式,直到另一個序列變更格式,或終端機自行重設為止。

使用 Colorama 時,若要將整體格式狀態恢復為預設值,請使用 Style.RESET_ALL。Fore.RESET 只會重設前景色,不會重設其他所有啟用中的樣式。請依照變更的屬性選擇相應的重設方式,並將它放在需要套用格式的文字後面。如此可避免後續訊息和提示沿用非預期的終端機樣式。