官方文档:Welcome to Rich’s documentation! — Rich 12.5.1 documentation
介绍:
Rich 是一个 Python 库,用于将富文本(带有颜色和样式)写入终端,并用于显示高级内容,例如表格、markdown 和语法高亮代码。
Rich 适用于 OSX、Linux 和 Windows。
要求:
Rich 适用于 OSX、Linux 和 Windows。
Rich 需要 Python 3.6.3 及更高版本。请注意,由于不支持 NamedTuples 上的方法,因此不支持 Python 3.6.0。
安装:
pip install rich
如果您打算将 Rich 与 Jupyter 一起使用,则可以使用以下命令安装一些额外的依赖项:
pip install rich[jupyter]
使用:
启动和运行 Rich 的最快方法是导入替代print
函数,该函数采用与内置函数相同的参数,print
并可用作替代函数。
demo演示

如果您不想影响 Python 的内置打印,您可以导入rich.print
为rprint
(例如):
from rich import print as rprint
控制台 API
为了完全控制终端格式,Rich 提供了一个Console类。大多数应用程序都需要一个控制台实例,因此您可能希望在模块级别或作为顶级对象的属性创建一个。例如,您可以在项目中添加一个名为“console.py”的文件:
from rich.console import Console
console = Console()
然后您可以从项目中的任何位置导入控制台,如下所示:
from my_project.console import console
属性
控制台将自动检测渲染时所需的许多属性。
-
size是终端的当前尺寸(如果调整窗口大小可能会改变)。
-
encoding是默认编码(通常是“utf-8”)。
-
is_terminal是一个布尔值,指示控制台实例是否正在写入终端。
-
color_system是一个包含控制台颜色系统的字符串(见下文)。
颜色系统
您可以设置color_system
为以下值之一:
-
None
完全禁用颜色。 -
"auto"
将自动检测颜色系统。 -
"standard"
可以显示8种颜色,有正常和明亮的变化,总共16种颜色。 -
"256"
可以显示“标准”中的 16 种颜色以及 240 种颜色的固定调色板。 -
"truecolor"
可以显示 1670 万种颜色,这可能是您的显示器可以显示的所有颜色。 -
"windows"
可以在旧版 Windows 终端中显示 8 种颜色。新的 Windows 终端可以显示“真彩色”。
印刷
将丰富的内容写入终端使用该print()方法。Rich 将通过其 ( __str__
) 方法将任何对象转换为字符串,并执行一些简单的语法高亮显示。它还可以漂亮地打印任何容器,例如字典和列表。如果您打印一个字符串,它将呈现Console Markup。
console.print([1, 2, 3])
console.print("[blue underline]Looks like a link")
console.print(locals())
console.print("FOO", style="white on blue")
日志记录
这些log()方法提供与打印相同的功能,但添加了一些对调试正在运行的应用程序有用的功能。日志记录将当前时间写入左侧的一列,并将调用该方法的文件和行写入右侧的一列。
为了帮助调试,log() 方法有一个log_locals
参数。如果将此设置为True
,Rich 将显示调用该方法的局部变量表。
打印json
该print_json()方法将漂亮地打印(格式和样式)包含 JSON 的字符串。这是一个简短的示例:
console.print_json('[false, true, null, "foo"]')

您还可以通过记录一个对象来记录json :JSON

低电平输出
除了print()和之外log(),Rich 还有一种out()方法,它提供了一种向终端写入较低级别的方式。out() 方法将所有位置参数转换为字符串,并且不会漂亮地打印、自动换行或将标记应用于输出,但可以应用基本样式并可选择进行突出显示。
规则
该rule()方法将绘制一条带有可选标题的水平线,这是将终端输出划分为多个部分的好方法。
console.rule("[bold red]Chapter 2")
rule 方法还接受一个style
参数来设置线条的样式,以及一个align
参数来对齐标题(“左”、“中心”或“右”)。
对其方式
print 和 log 都支持一个justify
参数,如果设置必须是“default”、“left”、“right”、“center”或“full”之一。如果“left”,任何打印(或记录)的文本都将左对齐,如果“right”文本将在终端右侧对齐,如果“center”文本将居中,如果“full”文本将与终端的左右边缘对齐(就像书中的印刷文本)。
的默认值justify
通常"default"
看起来相同,"left"
但有细微差别。左对齐将用空格填充文本的右侧,而默认对齐不会。如果您使用参数设置背景颜色,您只会注意到差异style
。
from rich.console import Console
console = Console(width=20)
style = "bold white on blue"
console.print("Rich", style=style)
console.print("Rich", style=style, justify="left")
console.print("Rich", style=style, justify="center")
console.print("Rich", style=style, justify="right")
溢出
overflow
您可以使用以下字符串之一的参数指定 Rich 应如何处理溢出print():“fold”、“crop”、“ellipsis”或“ignore”。默认值为“折叠”,它将把多余的字符放在下一行,根据需要创建尽可能多的新行以适应文本。
“crop”方法会截断行尾的文本,丢弃任何会溢出的字符。
“ellipsis”方法类似于“crop”,但会在任何被截断的文本的末尾插入一个省略号字符(“...”)。
from typing import List
from rich.console import Console, OverflowMethod
console = Console(width=14)
supercali = "supercalifragilisticexpialidocious"
overflow_methods: List[OverflowMethod] = ["fold", "crop", "ellipsis"]
for overflow in overflow_methods:
console.rule(overflow)
console.print(supercali, overflow=overflow, style="bold blue")
console.print()
控制台风格
控制台有一个style
属性,您可以使用该属性将样式应用于您打印的所有内容。默认情况下style
为 None 表示不应用额外的样式,但您可以将其设置为任何有效的样式。下面是一个带有样式属性集的控制台示例:
from rich.console import Console
blue_console = Console(style="white on blue")
blue_console.print("I'm blue. Da ba dee da ba di.")

输入
控制台类有一个input()方法,其工作方式与 Python 的内置input()函数相同,但可以使用 Rich 可以打印的任何内容作为提示。例如,这是一个带有表情符号的彩色提示:
from rich.console import Console
console = Console()
console.input("What is [i]your[/i] [bold red]name[/]? :smiley: ")

出口
Console 类可以将写入它的任何内容导出为文本、svg 或 html。要启用导出,首先record=True
在构造函数上进行设置。这告诉 Rich 保存您print()
或log()
. 这是一个例子:
from rich.console import Console
console = Console(record=True)
写完内容后,您可以调用export_text(),export_svg()或export_html()以字符串形式获取控制台输出。您也可以调用save_text()、save_svg()或save_html()将内容直接写入磁盘。
导出SVG
使用export_svg()orsave_svg()时,SVG 的宽度将匹配终端窗口的宽度(以字符为单位),而高度将自动缩放以适应控制台输出。
您可以在 Web 浏览器中打开 SVG。您还可以将其插入到带有<img>
标签的网页中,或者将标记复制到 HTML 中。
from rich.console import Console
error_console = Console(stderr=True)
您可能还希望style
在控制台上设置参数以使错误消息在视觉上清晰可见。您可以这样做:
error_console = Console(stderr=True, style="bold red")
文件输出
您可以通过在构造函数上设置参数来告诉 Console 对象写入文件file
——它应该是为写入文本而打开的类似文件的对象。您可以使用它来写入文件,而不会在终端上出现输出。这是一个例子:
import sys
from rich.console import Console
from datetime import datetime
with open("report.txt", "wt") as report_file:
console = Console(file=report_file)
console.rule(f"Report Generated {datetime.now().ctime()}")
捕获输出
在某些情况下,您可能希望从控制台捕获输出,而不是直接将其写入终端。您可以使用capture()返回上下文管理器的方法来执行此操作。退出此上下文管理器时,调用get()以返回本应写入终端的字符串。这是一个例子
from rich.console import Console
console = Console()
with console.capture() as capture:
console.print("[bold red]Hello[/] World")
str_output = capture.get()
捕获输出的另一种方法是将控制台文件设置为io.StringIO. 如果您在单元测试中测试控制台输出,这是推荐的方法。这是一个例子:
from io import StringIO
from rich.console import Console
console = Console(file=StringIO())
console.print("[bold red]Hello[/] World")
str_output = console.file.getvalue()
寻呼
如果您有一些长输出要呈现给用户,您可以使用寻呼机来显示它。寻呼机通常是操作系统上的一个应用程序,它至少支持按键滚动,但通常支持上下滚动文本和其他功能。
您可以通过调用pager()which 返回上下文管理器来分页控制台的输出。当寻呼机退出时,打印的任何内容都将发送到寻呼机。这是一个例子:
from rich.__main__ import make_test_card
from rich.console import Console
console = Console()
with console.pager():
console.print(make_test_card())
备用屏幕
终端支持与常规终端分开的“交替屏幕”模式,并允许全屏应用程序保持输入和命令流不变。Rich 通过该set_alt_screen()方法支持此模式,但建议您使用screen()它返回一个上下文管理器,该管理器在退出时禁用备用模式。
from time import sleep
from rich.console import Console
console = Console()
with console.screen():
console.print(locals())
sleep(5)
上面的代码将在备用屏幕上显示一个漂亮的打印字典,然后在 5 秒后返回命令提示符。
您还可以提供一个可渲染screen()对象,当您调用时将显示在备用屏幕中update()
。
from time import sleep
from rich.console import Console
from rich.align import Align
from rich.text import Text
from rich.panel import Panel
console = Console()
with console.screen(style="bold white on red") as screen:
for count in range(5, 0, -1):
text = Align.center(
Text.from_markup(f"[blink]Don't Panic![/blink]\n{count}", justify="center"),
vertical="middle",
)
screen.update(Panel(text))
sleep(1)