玩转 Python 编程——输出彩色文本

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

一、给“枯燥”的生活增加一点色彩

在日常的电脑使用中,我们经常会遇到终端输出的文本信息,它们往往都是单调的黑底白字。然而,在一些先进的系统或开发应用中,输出的文本却是五彩斑斓的。这样的设计不仅为使用者带来了视觉上的享受,更在无形中提升了工作效率和体验。

在终端输出彩色文本的好处包括:

  1. 增强可读性
    使用不同的颜色可以清晰地区分各类信息,比如错误信息用红色,成功信息用绿色。这样,读者可以迅速捕捉到关键数据,无需在冗长的文本中费力寻找。

  2. 优化用户体验
    彩色输出使得终端界面更加生动友好。对于有一定电脑基础但无编程经历的读者来说,这样的设计能够更直观地理解输出信息,大大减轻了认知负担。

  3. 加速调试和日志分析
    在开发或运维过程中,面对大量的日志信息,彩色输出可以帮助读者快速识别出错误和警告信息。这样一来,解决问题的时间大大缩短,工作效率显著提升。

  4. 直观反馈指令状态
    在终端中执行命令时,不同颜色的变化可以即时反馈命令的执行状态。比如,执行成功时显示绿色,失败时显示红色。这样的即时反馈机制有助于读者更好地掌控整个操作过程。

此外,彩色文本输出还有助于:

  1. 增加趣味性
    单调的黑底白字容易让人感到乏味,而彩色文本则能增添一丝乐趣。对于长时间面对终端的读者来说,这样的设计无疑是一种视觉上的享受。

  2. 促进学习
    对于初学者来说,彩色文本输出可以作为一种视觉辅助工具。通过颜色的区分,读者可以更容易地理解和学习各种命令和输出信息。

综上所述,终端输出彩色文本不仅提高了可读性和用户体验,还加快了调试和日志分析的速度,增强了指令反馈的直观性。同时,它还为电脑使用增添了一份趣味性和学习价值。

二、揭秘终端彩色文本输出的原理

我们在终端中看到这些色彩斑斓的文本输出并非魔法,而是依赖于一系列精心设计的命令序列。这些序列在文本输出之前被发送到终端,用于指导终端如何显示接下来的文本内容,包括颜色和字体样式的变化。

  • ANSI转义序列:终端色彩的基石

在这些命令序列中,ANSI转义序列无疑是最为人熟知且广泛应用的规范之一。它得到了大多数终端及终端模拟器的全力支持,成为在终端中实现彩色文本输出的不二之选。

  • 颜色编码:ANSI转义序列的核心

ANSI转义序列通过特定的颜色编码来控制文本的颜色。这些编码以特定的字符序列形式存在,当终端接收到这些序列时,就会根据编码的指示来更改文本的颜色。通过这种方式,我们可以轻松地在终端中输出带有各种颜色的文本。

  • Python中的彩色文本输出

对于Python开发者来说,利用ANSI转义序列在终端中输出彩色文本同样简单且直观。Python提供了多种方法来实现这一功能,无论是直接拼接ANSI转义序列到字符串中,还是借助第三方库来简化操作,都能轻松达成目标。

在本文的后续部分,我们将深入探讨ANSI转义序列的颜色编码细节,并详细展示如何在Python中利用这些序列来输出彩色文本。无论读者是否具备编程经验,都能通过本文的指引轻松掌握这一技巧。

ANSI转义序列还有实现诸如控制光标位置等额外的操作,这些额外的操作与本文重点讨论的彩色文字输出关系不大,因此在此不再详细展开。

对于ANSI转义序列感兴趣的读者,或希望进一步了解该主题的读者,可以参考以下信息来源:>
ANSI escape code
如上述链接无法访问,请尝试以下链接:>
ANSI escape code | encyclopedia article by TheFreeDictionary

三、ANSI转义序列

ANSI转义序列的定义

ANSI转义序列起源于20世纪70年代,是美国国家标准协会(ANSI)定义的一种字符序列标准,ANSI转义序列是带内信令的标准,用于控制视频文本终端和终端模拟器上的光标位置、颜色、字体样式和其他选项。当终端接收到这些序列时,就会按照序列中的指令来改变显示效果。

各平台的支持情况

  • 类Unix系统(Unix/Linux/MacOS):
    • 几乎所有平台都原生支持ANSI转义序列
  • Windows:
    • Windows 10之前的控制台不支持ANSI转义序列,在Python中使用下方的colorama可以输出彩色文本,具体操作见下文。
    • Windows 10的1511更新后开始支持ANSI转义序列

ANSI转义序列的构成

  • 起始符:ANSI转义序列通常以ESC字符(ASCII码为27,八进制表示为\033)开头。
  • 转义序列:仅由0x20-0x7F范围内的字节(所有非控制ASCII字符)组成。
  • 无需前瞻解析:解析转义序列时可以逐个字节地处理这些序列,而无需提前查看序列后面的内容来确定序列的结束。

输出彩色文本相关的ANSI转义序列

  • 格式:CSI + 参数 + 结束符
  • CSI:ESC字符(ASCII码为27,八进制表示为\033) + 字符 “[”。(CSI - Control Sequence Introducer)
  • 参数:用";"分隔的字符序列,终端要执行的具体操作的数据,需要的参数可以省略,一般默认为0。

  • 结束符:一个特定的字符,指定了终端要执行的具体操作。

    以“m”字符结尾,SGR(Select Graphic Rendition:图形再现选择)命令,表示这是一个设置文本外观属性的转义序列,如文本颜色、显示方式等。

    例如:\033[31mHello, world!\033[0m

    • \033[31m:表示后续的文本输出为红色。
    • \033[0m:表示重置之前设置的外观属性。

在Python中使用ANSI转义序列输出彩色文本

在Python中,可以使用print函数结合ANSI转义序列来输出彩色文本。例如:在终端输出红色的“Hello, world!”

print('\033[31mHello, world!\033[0m')

具体内容会在下文详细解释。

使用Python库简化彩色文本输出

虽然直接使用ANSI转义序列可以实现彩色文本输出,但这种方式需要记忆大量的转义序列,且代码可读性较差。因此,Python社区开发了一些第三方库来简化这一过程,如colorama和termcolor等。

  • colorama:提供了一个易于使用的API来控制终端输出的颜色和样式。它封装了ANSI转义序列,使得用户可以通过简单的函数调用来设置文本颜色、背景色、加粗等属性。
  • termcolor:另一个流行的Python库,也提供了类似的功能。它允许用户通过简单的函数调用来设置文本的颜色和样式,并自动处理ANSI转义序列的插入和重置。

四、SGR 参数

SGR 参数设置显示属性。可以在同一个序列中设置多个属性,它们之间用分号分隔。每个显示属性都会持续生效,直到后续的SGR将其重置。如果没有给出任何代码,则CSI m被视为CSI 0 m(重置/正常)。

  • SGR代码

下表列出一些常用的SGR参数代码

代码命令说明
0Reset重围(关闭)之前所有设置的属性。
1Bold加粗(变亮)显示
2Dim细化(变暗)显示
3Itatic斜体显示
4Underline显示下划线
5Slow blink慢闪(小于150次/分钟,多数终端不支持)
6Rapid blink快闪(大于150次/分钟,绝大多数终端不支持)
7Reverse反转显示
8Hide隐藏(无显示)
9Strike删除线
21Doubly underlined双下划线
30–37Foreground Color前景色
38Set foreground Color设置前景色,256色:5;n,真彩色:2;r;g;b
39Default foreground Color默认的前景色
40–47Background Color背景色
48Set background Color设置背景色,256色:5;n,真彩色:2;r;g;b
49Default background ColorBackground Color默认的背景色
53Overline上划线
90–97Bright foreground Color亮前景色
100–107Bright background Color亮背景色
  • 示例:不同的显示风格
    print('\n测试不同风格的文本...')

    print('\033[0;31m正常!\033[0m')
    print('\033[1;31m粗体!\033[0m')
    print('\033[2;31m变暗!\033[0m')
    print('\033[3;31m斜斜体!\033[0m')
    print('\033[4;31m下划线!\033[0m')

    # !闪烁需要在Windows终端中测试,在VS Code的终端中无效。
    print('\033[5;31m闪烁!\033[0m')     # 小于150次/秒
    # !快闪需要在Windows终端中测试,在VS Code的终端中无效。
    # 在Windows终端中快闪和慢闪烁效果一样。
    print('\033[6;31m快闪!\033[0m')     # 大于150次/秒

    print('\033[7;31m反色!\033[0m')

    # 隐藏风格:没有显示输出但仍占用对应的位置。
    print('\033[8;31m隐藏!\033[0m(已隐藏,无显示输出)')

    print('\033[9;31m删除!\033[0m')
    print('\033[21;31m双下划线!\033[0m')

    # 上划线测试需要在前面加一个空行,否则会和上一行的双下划线输出重叠。
    print('\n\033[53;31m上划线!\033[0m')

    # 组合测试:黄底红字,粗体、斜体、下划线、闪烁、反色、删除线和上划线。
    # !反色后最终显示为红底黄字。
    # *粗体和变暗不能同时使用,下划线和双下划线不能同时使用。
    print('组合测试:粗体、斜体、下划线、闪烁、反色、删除线和上划线...')
    print('\033[1;3;4;5;7;9;53;31;43m组合测试!\033[0m')

运行结果:

Windows命令提示符和PowerShell中的显示效果:

image-20250226172241094

VS Code 中终端(Python Debug Console,默认白色主题)中的显示效果:

image-20250226172850115

VS Code 中终端(Python Debug Console,默认黑色主题)中的显示效果:

image-20250226173803939

注意:

  • Windows终端中,当前景色和背景色相同时,字体无法显示。
  • VS Code的终端中,当前景色和背景色相近时,前景色会调整为黑色或白色。
  • VS Code的终端中显示效果和主题相关。
  • 在VS Code的有些主题下,显示颜色和设置的颜色不一致。
  • 直接使用ANSI转义序列和第三方库都存在以上的问题。

五、输出8(3-Bit)/16色(4-Bit)文本

ANSI转义序列的原始规范中仅有8种颜色,并为它们命名。SGR参数30–37用于选择前景色,而40–47用于选择背景色。许多终端将“加粗”(SGR代码1)实现为更亮的颜色,而不是不同的字体,从而提供了另外8种前景色。通常,这些更亮的颜色不能作为背景色使用,但有时可以通过反显视频(SGR代码7)来实现。例如:要获得黑底白字,使用ESC[30;47m;要获得红色,使用ESC[31m;要获得亮红色,使用ESC[1;31m。要将颜色重置为默认值,可以使用ESC[39;49m(某些终端不支持),或重置所有属性,使用ESC[0m。后来的终端增加了使用90–97和100–107直接指定“亮色”的功能。

  • 颜色名称

当硬件开始使用8位数字模拟转换器(DAC)时,一些软件将这些颜色名称分配了24位颜色值。下面的图表显示了某些常见硬件和软件的24位颜色值。

image-20250223172336195

  • 示例:16种前景色和背景色

16种颜色包括8种基本色和8种明亮色,下面的示例输出16种前景色和背景色。

    # 输出8种标准颜色:黑色、红色、绿色、黄色、蓝色、紫色、青色和白色
    print('\n测试8种标准颜色...')
    for i in range(0, 8):   # 30~37为前景色,无背景色
        print(f'\033[{i+30}mHello, world!\033[0m')  # 30~37为前景色
    for i in range(0, 8):   # 40~47为背景色,黄色字体
        print(f'\033[{i+40}mHello, world!\033[0m')  # 40~47为背景色

    # 输出8种高亮颜色:亮黑色、亮红色、亮绿色、亮黄色、亮蓝色、亮紫色、
    # 亮青色和亮白色
    print('\n测试8种高亮颜色...')
    for i in range(0, 8):   # 90~97为前景色,无背景色
        print(f'\033[{i+90}mHello, world!\033[0m')  # 90~97为前景色
    for i in range(0, 8):   # 100~107为背景色,黄色字体
        print(f'\033[{i+100}mHello, world!\033[0m')  # 100~107为背景色

运行结果:

Windows命令提示符和PowerShell中的显示效果:

VS Code 中终端(Python Debug Console,默认黑色主题)中的显示效果:

image-20250226175159852

六、输出256色(8-Bit)文本

当图形卡上256色查找表变得普遍时,为了从预定义的256种颜色中选择颜色,添加了转义序列:

ESC[ 38;5;⟨n⟩ m 选择前景色
ESC[ 48;5;⟨n⟩ m 选择背景色

其中,⟨n⟩是一个数字,代表颜色的索引号,范围从0到255,具体含义如下:

0-7:标准颜色(与ESC [ 30–37 m中的颜色相同)
8-15:高亮颜色(与ESC [ 90–97 m中的颜色相同)
16-231:6x6x6的立方体(216种颜色),计算方式为:16 + 36 × r + 6 × g + b(其中0 ≤ r, g, b ≤ 5)
232-255:从黑色到白色的24级灰度

  • 256色颜色表

image-20250223111101196

  • 示例:输出256颜色表
    # *显示颜色的代码,背景色设置为对应的颜色。
    print('\n测试256色显示...')
    print('  前景色: ESC[38;5;#m')
    print('  背景色: ESC[48;5;#m')

    # 0-8:标准颜色
    print('输出标准颜色:')
    for i in range(0, 8):
        print(f'\033[48;5;{i}m {i:02d}', end=' ')
    print('\033[0m')    # 恢复默认颜色

    # 9-15:高亮颜色
    print('输出高亮颜色:')
    for i in range(8, 16):
        print(f'\033[48;5;{i}m {i:02d}', end=' ')
    print('\033[0m')

    # 16-231:216种颜色,彩色。
    print('输出216种彩色:')
    for i in range(16, 232):
        print(f'\033[48;5;{i}m {i:03d}', end=' ')
        if (i-16) % 12 == 11:   # 每12个换行一次
            print('\033[0m')

    # 232-255:24阶灰度色
    print('输出24阶灰度色:')
    for i in range(232, 244):
        print(f'\033[48;5;{i}m {i:03d}', end=' ')
    print('\033[0m')
    for i in range(244, 256):
        print(f'\033[48;5;{i}m {i:03d}', end=' ')
    print('\033[0m')

运行如下:

Windows命令提示符和PowerShell中的显示效果:

VS Code 中终端(Python Debug Console,主题:Github Dark Default)中的显示效果:

七、输出真彩色(24-Bit)文本

随着支持16至24位色彩的“真彩色”显卡变得普及,Xterm、KDE的Konsole、iTerm以及所有基于libvte的终端(包括GNOME Terminal)都支持24位前景色和背景色的设置。

ESC[ 38;2;⟨r⟩;⟨g⟩;⟨b⟩ m 用于选择RGB前景色,而ESC[ 48;2;⟨r⟩;⟨g⟩;⟨b⟩ m 用于选择RGB背景色。

  • 示例:输出部分真色彩颜色表
    # *显示颜色的RGB值,背景色设置为对应的颜色。
    print('\n测试RGB颜色...')

    # 考虑到测试的效率,只输出4*4*4=64种颜色
    for r in range(0, 256):
        if r % 64 != 0:     # 每一重循环只输出4种颜色
            continue
        for g in range(0, 256):
            if g % 64 != 0:
                continue
            for b in range(0, 256):
                if b % 64 != 0:
                    continue
                print(f'\033[48;2;{r};{g};{b}m ({r:03d},{g:03d},{b:03d})',
                      end=' ')
            # 每行输出4种颜色
            print('\033[0m')
    print('')  # 换行

运行结果:

Windows命令提示符和PowerShell中的显示效果:

image-20250226183811512

VS Code 中终端(Python Debug Console,主题:Github Dark Default)中的显示效果:

八、使用 colorama 输出16色文本

colorama 介绍

Colorama是一个专为Python设计的库,旨在增强终端输出的视觉效果。Colorama库的开发初衷是为了解决在Windows系统上终端输出颜色受限的问题。在Colorama出现之前,Windows控制台对于ANSI转义序列的支持有限,这限制了开发者在终端中输出彩色文本的能力。Colorama通过转换ANSI转义序列为Windows系统可以理解的win32调用,实现了跨平台的彩色输出功能。

  1. 跨平台支持:Colorama的最大特点是支持跨平台。无论是Windows、Linux还是macOS,Colorama都能正常工作,这使得它在众多终端颜色库中脱颖而出。
  2. 简单易用:Colorama提供了简单易用的接口,允许开发者通过简单的函数调用即可实现彩色文本、背景色和文本样式的控制。Colorama定义了一系列颜色常量和样式常量,开发者只需在打印文本时添加这些常量即可改变文本的颜色和样式。
  3. 丰富的功能:除了支持基本的文本颜色和背景色设置外,Colorama还支持设置文本的样式,如加粗、斜体等。

Colorama库虽然功能强大且实用,但仍存在一些不足之处::

  • 不支持所有终端:某些终端可能不支持ANSI转义序列,这是Colorama实现彩色输出的基础。在这些终端上,Colorama可能无法正常工作或显示效果不佳。
  • 只支持基本颜色:Colorama只支持在终端上显示8种基本的颜色,不支持256色。
  • 只支持两种风格:明亮(粗体)和暗色。

总之,Colorama是一个强大且实用的Python库,它让终端输出变得更加丰富多彩。无论是开发命令行工具、编写脚本还是记录日志,Colorama都能为项目增色不少。

使用colorama

  • 安装colorama库:colorama库不是Python的标准库,使用前需要安装,安装的命令如下:pip install colorama

  • 导入colorama库:使用时先导入colorama库

    from colorama import just_fix_windows_console, Fore, Back, Style
    
    • just_fix_windows_console:用于修复Windows命令行中的颜色显示问题。
    • Fore:提供一系列前景色(文本颜色)的选项。
    • Back:提供一系列背景色的选项。
    • Style:提供文本样式选项,如加粗、闪烁等。
  • 初始化colorama库:如代码中注释所述,早期的Windows需要额外的初始化操作才能输出彩色文本。

    # 注意:
    # 在Windows系统下,Win10(更新版本1511)之前的终端不支持彩色输出,需要
    # 调用colorama库的just_fix_windows_console函数来修复它。
    # Win10(更新版本1511)之后的终端已经支持彩色输出,不需要调用这个函数。
    # 在其他操作系统中,just_fix_windows_console函数什么也不做。
    print("初始化 colorama: 修复Windows(Win10之前)终端彩色输出问题...")
    just_fix_windows_console()
    
  • 输出彩色的文本:8种标准颜色的前景色和背景色,8种高亮颜色的前景色和背景色,

        print('使用colorama库设置颜色...')
    
        print('输出8种标准颜色...')
        print(Fore.BLACK + 'Hello, World!' + Style.RESET_ALL + ' ' + # 前景色
              Back.BLACK + 'Hello, World!' + Style.RESET_ALL)        # 背景色
        print(Fore.RED + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.RED + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.GREEN + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.GREEN + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.YELLOW + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.YELLOW + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.BLUE + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.BLUE + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.MAGENTA + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.MAGENTA + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.CYAN + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.CYAN + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.WHITE + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.WHITE + 'Hello, World!' + Style.RESET_ALL)
    
        print('输出8种明亮颜色...')
        print(Fore.LIGHTBLACK_EX + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.LIGHTBLACK_EX + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.LIGHTRED_EX + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.LIGHTRED_EX + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.LIGHTGREEN_EX + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.LIGHTGREEN_EX + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.LIGHTYELLOW_EX + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.LIGHTYELLOW_EX + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.LIGHTBLUE_EX + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.LIGHTBLUE_EX + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.LIGHTMAGENTA_EX + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.LIGHTMAGENTA_EX + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.LIGHTCYAN_EX + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.LIGHTCYAN_EX + 'Hello, World!' + Style.RESET_ALL)
        print(Fore.LIGHTWHITE_EX + 'Hello, World!' + Style.RESET_ALL + ' ' +
              Back.LIGHTWHITE_EX + 'Hello, World!' + Style.RESET_ALL)
    

运行结果:

image-20250225152558524

  • 输出不同风格的文本:正常,高亮,暗色,只支持这两种风格。

        print('使用colorama库设置样式...')
        # 正常
        print(Style.NORMAL + Fore.RED + 'Hello, World!' + Style.RESET_ALL)
        # 高亮
        print(Style.BRIGHT + Fore.RED + 'Hello, World!' + Style.RESET_ALL)
        # 变暗
        print(Style.DIM + Fore.RED + 'Hello, World!' + Style.RESET_ALL)
    

运行结果:

image-20250225161532619

  • 移动光标:colorama库还提供控制光标位置的功能,包括:光标上移,光标下移,光标左移,光标右移,光标移动到指定位置。

        print('使用colorama库控制光标位置...')
    
        print("光标上移、下移、左移、右移...")
        print(Cursor.FORWARD(20) + Fore.GREEN + "向前20个字" +
              Cursor.BACK(30) + Fore.GREEN + "向后30个字符" +
              Cursor.DOWN(4) + Fore.GREEN + "向下4行" +
              Cursor.UP(2) + Fore.GREEN + "向上2行" + Style.RESET_ALL)
    
        print('移动光标到指定的行列...')
        print(Cursor.POS(10, 10) + Fore.GREEN + "光标移动到第10行第10列")
        
        print(Style.RESET_ALL)    # 重置样式
    

    运行结果:

    image-20250225185023701

九、使用 termcolor 输出16色文本

termcolor 介绍

termcolor是一个简洁而强大的Python库,它允许开发者在命令行接口中为文本添加各种颜色和样式,从而使输出信息更易读、更具吸引力。

  1. 文本着色功能
    termcolor提供了多种预定义的颜色选项,例如红色、绿色、黄色、蓝色、洋红色、青色、白色和黑色等。你可以使用这些颜色来为你的文本添加丰富的色彩。此外,它还支持背景颜色的设置,允许你在特定的背景色上输出文本,从而进一步增强文本的可读性和视觉效果。

  2. 文本样式支持
    除了颜色之外,termcolor还支持多种文本样式,如加粗、下划线、闪烁等。这些样式可以单独使用,也可以组合使用,以创建更加多样化的输出效果。

  3. 跨平台兼容性
    termcolor旨在与多种终端和操作系统兼容,包括Windows、Linux和macOS等。它能够自动检测当前终端是否支持颜色输出,并相应地调整其行为。这意味着你可以在不同的终端和操作系统上使用termcolor,而无需担心兼容性问题。

  4. 易于使用的API
    termcolor提供了简洁而直观的API,使得添加颜色和样式变得非常容易。你可以使用colored()函数来返回着色后的字符串,或者直接使用cprint()函数打印着色后的文本。这些函数的使用非常简单,无需复杂的配置或学习成本。

termcolor也存在一些不足之处::

  • 不支持所有终端:不支持Win10以前的Windows版本,可以在这个早期的Windows版本可以使用Colorama库。
  • 只支持基本颜色:termcolor只支持在终端上显示8种基本的颜色,不支持256色。

使用termcolor

  • 安装termcolor库:termcolor库不是Python的标准库,使用前需要安装,安装的命令如下:pip install termcolor

  • 导入termcolor库:使用时先导入termcolor库

    from termcolor import colored, cprint
    
    • colored:一个用于生成带有颜色和样式字符串的函数。
    • cprint:一个用于直接在控制台打印带有颜色和样式文本的函数。
  • 输出前景色:8种标准的前景色和8种高亮的前景色。

        print('\n测试标准前景色...')
        print(colored('Hello, World!', 'red'))              # 红色文本
        print(colored('Hello, World!', 'green'))            # 绿色文本
        print(colored('Hello, World!', 'blue'))             # 蓝色文本
        print(colored('Hello, World!', 'yellow'))           # 黄色文本
        print(colored('Hello, World!', 'magenta'))          # 品红文本
        print(colored('Hello, World!', 'cyan'))             # 青色文本
        print(colored('Hello, World!', 'white'))            # 白色文本
        print(colored('Hello, World!', 'grey'))             # 灰色文本
        print(colored('Hello, World!', 'black'))            # 黑色文本
    
        print('\n测试前景色,亮色...')
        print(colored('Hello, World!', 'light_red'))        # 浅红色文本
        print(colored('Hello, World!', 'light_green'))      # 浅绿色文本
        print(colored('Hello, World!', 'light_blue'))       # 浅蓝色文本
        print(colored('Hello, World!', 'light_yellow'))     # 浅黄色文本
        print(colored('Hello, World!', 'light_magenta'))    # 浅品红文本
        print(colored('Hello, World!', 'light_cyan'))       # 浅青色文本
        print(colored('Hello, World!', 'light_grey'))       # 浅灰色文本
        print(colored('Hello, World!', 'dark_grey'))        # 深灰色文本
    
  • 输出背景色:8种标准的背景色和8种高亮的背景色。

        print('\n测试背景色...')
        print(colored('Hello, World!', 'white', 'on_red'))              # 红色文本
        print(colored('Hello, World!', 'white', 'on_green'))            # 绿色文本
        print(colored('Hello, World!', 'white', 'on_blue'))             # 蓝色文本
        print(colored('Hello, World!', 'white', 'on_yellow'))           # 黄色文本
        print(colored('Hello, World!', 'white', 'on_magenta'))          # 品红文本
        print(colored('Hello, World!', 'white', 'on_cyan'))             # 青色文本
        print(colored('Hello, World!', 'white', 'on_white'))            # 白色文本
        print(colored('Hello, World!', 'white', 'on_grey'))             # 灰色文本
        print(colored('Hello, World!', 'white', 'on_black'))            # 黑色文本
    
        print('\n测试背景色,亮色...')
        print(colored('Hello, World!', 'white', 'on_light_red'))        # 浅红色文本
        print(colored('Hello, World!', 'white', 'on_light_green'))      # 浅绿色文本
        print(colored('Hello, World!', 'white', 'on_light_blue'))       # 浅蓝色文本
        print(colored('Hello, World!', 'white', 'on_light_yellow'))     # 浅黄色文本
        print(colored('Hello, World!', 'white', 'on_light_magenta'))    # 浅品红文本
        print(colored('Hello, World!', 'white', 'on_light_cyan'))       # 浅青色文本
        print(colored('Hello, World!', 'white', 'on_light_grey'))       # 浅灰色文本
        print(colored('Hello, World!', 'white', 'on_dark_grey'))        # 深灰色文本
    
  • 输出不同风格的文本:高亮,暗色,下划线,闪烁,反色,隐藏和删除线。

        print('\n测试显示风格...')
        cprint('粗体黄色文本!', 'yellow', attrs=['bold'])       # 粗体黄色文本
        cprint('暗色黄色文!', 'yellow', attrs=['dark'])       # 暗色黄色文本
        cprint('下划线黄色文本!', 'yellow', attrs=['underline'])  # 下划线黄色文本
    
        # !闪烁的黄色文本,需要在Windows终端上测试,闪烁效果有效
        # 在VS Code中测试,闪烁效果无效
        cprint('闪烁黄色文本!', 'yellow', attrs=['blink'])
        cprint('反色黄色文本!', 'yellow', attrs=['reverse'])    # 反色显示的黄色文本
        cprint('隐藏的黄色文本!', 'yellow', attrs=['concealed'])    # 隐藏的黄色文本
        print('(隐藏的黄色文本)')
        cprint('删除线黄色文本!', 'yellow', attrs=['strike'])       # 删除线黄色文本
    
        # 组合使用,同时设置多种属性
        # 黄色高亮文本,洋红色背景,带删除线
        # !注意:在VS Code中,设置了背景颜色后,前景色会变成黑色
        print(colored('组合测试!', 'yellow', 'on_magenta',
                      attrs=['bold', 'strike']))
    

    运行结果:

    十、测试程序的源码

    本文的完整源码下载地址:Python输出彩色文本(ANSI转义,256色,真彩色,colorama,termcolor)资源-CSDN文库

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程工人士

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值