深入剖析 ANSI Terminal Colors 的 5 大技巧 | 用 Python 解鎖顏色的奥秘
ANSI 終端顏色控制(ANSI terminal colors)是一項強大的技術,能夠讓我們在終端中設置顏色,從而高效地顯示不同類型的信息、警告或錯誤。這些顏色控制能讓我們的終端輸出變得更具可視性,並使開發過程更加直觀。
![深入剖析 ANSI Terminal Colors 的 5 大技巧 | 用 Python 解鎖顏色的奥秘 1 ANSI Terminal Colors](https://saludpcb.com/zh/wp-content/uploads/2024/11/Mastering-ANSI-Terminal-Colors-Unlocking-Background-Secrets-with-Python.jpg)
內容
簡介
ANSI(American National Standards Institute,美國國家標準協會)是負責制定和推動各種國家標準的機構,其中之一就是終端顏色控制標準。ANSI 轉義序列是一種用來在終端中控制顯示樣式(如顏色、字型、光標位置等)的技術。
然而,許多開發者可能對 ANSI 控制碼 ( ANSI Terminal Colors )的運作原理並不熟悉,也不知道如何利用它來優化終端的顯示。本文將深入解析 ANSI 終端顏色控制 的工作原理,並教你如何利用 Python 解鎖背景顏色的奥秘,讓你在終端中充分發揮顏色的威力。
ANSI Terminal Colors 的轉義序列
ANSI 轉義序列允許開發者以極高的精確度控制終端輸出的顯示效果。
ANSI 控制碼的基本結構
ESC[參數1;參數2;...m
- ESC:轉義字符,表示為
\x1b
或\033
( 以 8 進制表示 )。 - [:表示控制序列的起始。
- 參數:定義樣式、顏色或其他控制選項。
- m:結尾字符,表示樣式設置。
常見參數組合
功能 | 前景色 | 背景色 | 樣式 |
---|---|---|---|
黑色 | 30 | 40 | |
紅色 | 31 | 41 | |
綠色 | 32 | 42 | |
黃色 | 33 | 43 | |
藍色 | 34 | 44 | |
加粗 | 1 | ||
下劃線 | 4 |
設定環境
- 安裝 Python 3.x or 更高。
- 終端或命令行工具並可執行 Python 腳本。
在 Python 中 | 改變文字顏色
以下是如何在 Python 中使用 ANSI 控制碼輸出紅色文字的範例:
print("\033[31mThis is red text\033[0m")
\033[31m
:設置前景色為紅色。\033[0m
:重置樣式,防止影響後續輸出。
在 Python 中 | 同時設置前景色與背景色
我們可以通過組合參數同時設置前景色和背景色:
print("\033[33;44mYellow text on a blue background\033[0m")
在 Python 中 | 動態設置顏色
為了更加靈活,可以編寫函數生成控制碼:
def styled_text(text, fg=None, bg=None):
fg_code = f"3{fg}" if fg is not None else ""
bg_code = f"4{bg}" if bg is not None else ""
codes = ";".join(filter(None, [fg_code, bg_code]))
return f"\033[{codes}m{text}\033[0m"
print(styled_text("Dynamic colors", fg=2, bg=5)) # Green text on a magenta background
在 Python 中 | 加入樣式效果
你還可以結合 加粗 和 下劃線 等效果:
print("\033[1;31mBold red text\033[0m")
print("\033[4;34mUnderlined blue text\033[0m")
顏色編號與範例
在 Unix 系統中,如 Linux 或 macOS,您可以完全使用 256 顏色模式。例如,您可以運行以下 Python 命令來查看所有 256 種背景顏色:
python3 -c "for i in range(256): print(f'\033[48;5;{i}m \033[0m', end='' if (i+1)%16 else '\n')"
如果您在 Windows 上執行相同的代碼,您可能無法看到所有顏色,甚至有可能會有顏色顯示錯誤或不兼容的情況,或使用 PowerShell 和命令提示符開始支持顏色,但對 256 顏色的支持仍然可能存在一些限制,且並非所有版本的 Windows 終端都能完全兼容。
完整程式碼
完整 Python 程式碼,包含了 styled_text
函數,讓您可以更靈活地設定動態的文字顏色和背景顏色。這個函數接受三個參數:text
(要顯示的文字)、fg
(前景顏色代碼,對應顏色的數字)和 bg
(背景顏色代碼,對應顏色的數字)。
# Function to apply styled text with dynamic foreground and background colors
def styled_text(text, fg=None, bg=None):
fg_code = f"3{fg}" if fg is not None else ""
bg_code = f"4{bg}" if bg is not None else ""
codes = ";".join(filter(None, [fg_code, bg_code]))
return f"\033[{codes}m{text}\033[0m"
# Example 1: Basic Text Colors
print("\033[31mThis text is red\033[0m")
print("\033[32mThis text is green\033[0m")
print("\033[34mThis text is blue\033[0m")
# Example 2: Background Colors
print("\033[41mThis text has a red background\033[0m")
print("\033[42mThis text has a green background\033[0m")
print("\033[44mThis text has a blue background\033[0m")
# Example 3: Text Styles (Bold, Underline)
print("\033[1mThis text is bold\033[0m")
print("\033[4mThis text is underlined\033[0m")
# Example 4: Combining Colors and Styles
print("\033[1;31;47mBold red text on white background\033[0m")
print("\033[4;32;43mUnderlined green text on yellow background\033[0m")
# Example 5: 256-Color Mode
print("256-Color Background Examples:")
for i in range(16, 32):
print(f"\033[48;5;{i}m {i:3} \033[0m", end=" ")
print() # Move to the next line
# Example 6: RGB True Color (24-bit)
print("\033[38;2;255;105;180mPink text\033[0m")
print("\033[48;2;70;130;180mText with Steel Blue background\033[0m")
# Example 7: Using the styled_text function with dynamic colors
print(styled_text("Dynamic colors", fg=2, bg=5)) # Green text on a magenta background
如果您想要在 Windows 平台上處理這些顏色並確保其在所有平台上都能正常運行,可以考慮使用 colorama
等庫來進行跨平台支持,但如果只在支持 ANSI 控制碼的終端上運行,則不需要任何額外的導入。
結論
ANSI 終端顏色控制 (ANSI terminal colors) 是提升終端可視化效果和交互體驗的有效工具。通過理解 ANSI 轉義序列,我們可以輕鬆地設置終端的顏色背景,並利用 Python 編程來實現這些顏色效果。無論是在錯誤報告、成功提示,還是創建動態顏色效果,這些技術都能顯著提升終端的可讀性和吸引力。
掌握這些技能,你將能夠在終端開發中實現更加靈活和富有表現力的顏色控制,讓你的開發環境變得更加高效和生動。