1. 什么是 Rich,为什么用它 #

默认的 print() 只能输出纯文本,调试复杂结构、展示表格或进度时很吃力。Rich 可以:

Rich 适用于日志美化、CLI 工具、数据展示、调试等场景。

2. 安装 #

pip install rich

可选增强:

pip install "rich[jupyter]"   # 支持 Jupyter Notebook

3. 快速入门:美化 print #

最简单的用法是用 rich.print 替换内置 print,它能自动为各种 Python 对象添加颜色和格式:

from rich import print

print("Hello, [bold magenta]World[/bold magenta]!")  # 支持控制台标记
print([1, 2, 3])
print({"name": "Alice", "age": 30, "skills": ["Python", "Rich"]})

也可以全局替换:

from rich import print as rprint
# 或者完全接管内置 print
from rich import print

输出效果:字典的键会高亮,字符串、数字有不同颜色,嵌套结构自动缩进。

4. 核心功能详解 #

4.1 Console 对象 #

Console 是 Rich 的核心,它提供了比 print 更多的控制:

from rich.console import Console

console = Console()
console.print("Hello", style="bold red")
console.log("这是一条日志")          # 自动添加时间戳
console.print("[blue]链接: https://www.example.com[/blue]")

4.2 控制台标记(Console Markup) #

使用类似 BBCode 的标签,可在字符串内嵌样式:

console.print("[bold italic]粗斜体[/] [red]红色[/] [on green]绿底[/]")
console.print("[link=https://example.com]点击访问[/link]")  # 可点击链接(部分终端支持)

[bold]、[italic]、[underline]、[strike] 等都可以叠加。颜色支持英文名、十六进制(#ff00ff)和 RGB(rgb(255,0,255))。

4.3 语法高亮与代码块 #

from rich.syntax import Syntax

code = """
def hello():
    print("Hello, World!")
"""
syntax = Syntax(code, "python", theme="monokai", line_numbers=True)
console.print(syntax)

4.4 Markdown 渲染 #

from rich.markdown import Markdown

md = """
# 标题
- 列表项 1
- **加粗文本**
"""
console.print(Markdown(md))

4.5 表格 #

from rich.table import Table

table = Table(title="用户列表")
table.add_column("ID", style="cyan", justify="right")
table.add_column("Name", style="magenta")
table.add_column("Score", justify="right")

table.add_row("1", "Alice", "95")
table.add_row("2", "Bob", "87")
console.print(table)

支持丰富的样式:边框类型(box= 参数)、标题位置、列对齐、行样式等。

4.6 进度条 #

from rich.progress import track
import time

for i in track(range(10), description="处理中..."):
    time.sleep(0.5)

更复杂的多进度条和自定义列:

from rich.progress import Progress

with Progress() as progress:
    task1 = progress.add_task("[red]下载...", total=100)
    task2 = progress.add_task("[green]处理...", total=50)
    while not progress.finished:
        progress.update(task1, advance=0.9)
        progress.update(task2, advance=0.3)
        time.sleep(0.1)

4.7 树形结构 #

from rich.tree import Tree

tree = Tree("📁 项目根目录")
src = tree.add("📁 src")
src.add("📄 main.py")
tests = tree.add("📁 tests")
tests.add("📄 test_main.py")
console.print(tree)

4.8 面板(Panel) #

from rich.panel import Panel

panel = Panel("重要提示内容", title="警告", border_style="red")
console.print(panel)

4.9 列与布局 #

from rich.columns import Columns
from rich.panel import Panel

panels = [Panel(f"面板 {i}") for i in range(1, 5)]
console.print(Columns(panels))

4.10 交互式提示与输入 #

from rich.prompt import Prompt, Confirm

name = Prompt.ask("请输入你的名字", default="匿名")
if Confirm.ask("确定继续吗?"):
    console.print(f"[green]你好, {name}![/]")

4.11 布局系统(Layout) #

可以创建分栏、分区的复杂布局(类似网页布局):

from rich.layout import Layout

layout = Layout()
layout.split(Layout(name="header", size=3), Layout(name="body"), Layout(name="footer", size=3))
layout["header"].update("头部内容")
layout["body"].split_row(Layout(name="left"), Layout(name="right"))
layout["left"].update("左侧栏")
layout["right"].update(Panel("右侧内容"))
console.print(layout)

4.12 Live Display(动态刷新) #

可以在不反复滚屏的情况下动态更新内容,常用于实时状态面板:

from rich.live import Live
from rich.table import Table
import time

table = Table(title="实时状态")
table.add_column("时间")
table.add_column("状态")

with Live(table, refresh_per_second=4) as live:
    for i in range(10):
        table.add_row(time.strftime("%X"), f"事件 {i}")
        live.update(table)
        time.sleep(0.5)

5. 记录日志(Logging Handler) #

Rich 可以替换标准库 logging 的 Handler,让日志带有颜色和列对齐:

import logging
from rich.logging import RichHandler

logging.basicConfig(
    level=logging.INFO,
    format="%(message)s",
    handlers=[RichHandler()]
)
log = logging.getLogger("rich")
log.info("这是一条信息日志")
log.warning("警告信息")
log.error("错误信息", extra={"markup": True})  # 支持标记

RichHandler 会显示时间、日志级别(带颜色)、消息,并自动用 rich.print 输出。

6. 与 Jupyter 配合 #

安装 rich[jupyter] 后,在 Notebook 中使用 console.print() 或直接返回 Rich 对象,可渲染 HTML 等价效果,语法高亮、表格、进度条都能正常显示。

7. 自定义主题与样式 #

Rich 内置了很多主题(Syntax 用的 pygments 主题)。也可以自定义 Console 的颜色系统:

from rich.console import Console
from rich.theme import Theme

custom_theme = Theme({
    "info": "dim cyan",
    "warning": "bold yellow",
    "error": "bold red"
})
console = Console(theme=custom_theme)
console.print("信息", style="info")
console.print("警告", style="warning")

8. 一些高级技巧 #

9. 完整示例:一个简单的 CLI 仪表盘 #

from rich.console import Console
from rich.table import Table
from rich.progress import Progress
from rich.live import Live
import time
import random

console = Console()

def system_monitor():
    table = Table(title="系统监控")
    table.add_column("指标", style="cyan")
    table.add_column("数值")

    with Live(table, refresh_per_second=2) as live:
        for _ in range(30):
            table.rows = []  # 清空
            table.add_row("CPU", f"{random.randint(10,90)}%")
            table.add_row("Memory", f"{random.randint(30,80)}%")
            table.add_row("Disk", f"{random.randint(20,60)}%")
            live.update(table)
            time.sleep(1)

system_monitor()

10. 总结 #

功能 关键类/方法
美化打印 rich.print, Console.print
控制台标记 [bold red]...[/]
表格 Table
进度条 track, Progress
树形结构 Tree
Markdown Markdown
代码高亮 Syntax
面板 Panel
布局 Layout, Columns
动态显示 Live
日志集成 RichHandler
导出 HTML/SVG console.export_html() / export_svg()

Rich 库几乎不需要大量配置就能将命令行程序的可读性和美观度提升一个档次,非常适合数据科学家、开发者、运维工具等需要与终端打交道的人。它的设计非常注重开发体验,API 直观,文档丰富,是 Python 终端应用的“颜值担当”。