Python中如何在终端打印彩色文本

Python中如何在终端打印彩色文本

在Python编程中,有时需要在终端输出彩色文本,以增强信息的可读性或突出显示特定内容。以下介绍几种常见的实现方法。

技术背景

在终端输出彩色文本的核心原理是使用ANSI转义序列。ANSI转义序列是一种特殊的字符序列,用于控制终端的文本显示格式,包括颜色、样式等。不同的操作系统和终端对ANSI转义序列的支持有所不同,因此在实现时需要考虑兼容性。

实现步骤

方法一:使用ANSI转义序列

ANSI转义序列以\033[\x1b[开头,后面跟着一系列的数字代码,用于指定颜色和样式,最后以m结尾。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 定义颜色类
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'

# 使用示例
print(bcolors.WARNING + "Warning: No active frommets remain. Continue?" + bcolors.ENDC)

# Python 3.6+ 的 f-string 用法
print(f"{bcolors.WARNING}Warning: No active frommets remain. Continue?{bcolors.ENDC}")

这种方法在大多数Unix系统(包括OS X和Linux)以及支持VT100仿真的Windows 10终端中都能正常工作。

方法二:使用termcolor模块

termcolor是一个简单易用的Python模块,用于在终端输出彩色文本。

1
2
3
from termcolor import colored

print(colored('hello', 'red'), colored('world', 'green'))

在Windows系统上使用该模块时,需要先运行os.system('color')来启用ANSI转义序列。

方法三:使用colorama模块

colorama是一个跨平台的Python模块,用于在终端输出彩色文本。它支持Python 3.5+和Python 2.7,并且在Windows系统上也能正常工作。

1
2
3
4
5
6
7
from colorama import init as colorama_init
from colorama import Fore
from colorama import Style

colorama_init()

print(f"This is {Fore.GREEN}color{Style.RESET_ALL}!")

方法四:自定义函数

可以自定义一个函数,根据RGB值生成彩色文本。

1
2
3
4
5
6
def colored(r, g, b, text):
return f"\033[38;2;{r};{g};{b}m{text}\033[0m"

text = 'Hello, World!'
colored_text = colored(255, 0, 0, text)
print(colored_text)

最佳实践

  • 跨平台兼容性:如果需要在不同的操作系统和终端上运行代码,建议使用colorama等跨平台模块。
  • 代码复用:将颜色和样式的定义封装成类或函数,方便在不同的地方复用。
  • 可读性:避免在代码中直接使用大量的ANSI转义序列,使用有意义的变量名来提高代码的可读性。

常见问题

  • Windows系统不显示颜色:在Windows系统上,需要启用VT100仿真或使用colorama等模块来支持ANSI转义序列。可以在代码开头添加os.system('color')或使用colorama.init()
  • 部分颜色显示异常:某些非标准的颜色代码(如90 - 97和100 - 107)在某些终端上可能显示不正常,建议使用标准的颜色范围(30 - 37和40 - 47)。
  • 颜色无法重置:在使用ANSI转义序列时,确保在需要重置颜色的地方使用\033[0m或相应的重置代码。

Python中如何在终端打印彩色文本
https://119291.xyz/posts/python-print-colored-text-in-terminal/
作者
ww
发布于
2025年4月14日
许可协议