mcpField
R
rich-terminal-output

rich-terminal-output

github.com/autumnsgrove开发6146 次安装6 天前更新
代码仓库

关于 rich-terminal-output

Rich Terminal Output 是面向 Python 开发者的技能,帮助构建命令行应用并呈现结构化输出。它展示 Rich 在样式、表格、进度显示、面板、语法高亮、日志和回溯中的用法。

主要功能

  1. 01控制台样式与标记语法
  2. 02表格、面板和树形显示
  3. 03长任务进度条
  4. 04语法高亮
  5. 05Rich 日志与异常回溯

适用场景

  1. 01在命令行应用中格式化结构化数据
  2. 02显示长时间操作的进度
  3. 03用面板呈现错误和状态
  4. 04改善调试输出和日志

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/autumnsgrove/lattice --skill rich-terminal-output

安装后在 Claude Code 中输入/rich-terminal-output确认已加载。

详细介绍

Rich 终端输出技能

激活时机

在以下情况下激活此技能:

  • 构建 CLI 应用程序
  • 显示结构化数据(表格)
  • 为长时间运行的操作显示进度
  • 创建错误/状态面板
  • 以美观格式打印对象以进行调试
  • 增强日志输出

安装

uv add rich

# Quick test
python -c "from rich import print; print('[bold green]Rich working![/]')"

核心概念

Console 对象
from rich.console import Console

console = Console()

# Basic output
console.print("Hello, World!")

# Styled output
console.print("[bold red]Error:[/] Something went wrong")
console.print("[green]Success![/] Operation completed")
标记语法
"[bold]Bold[/]"
"[italic]Italic[/]"
"[red]Red text[/]"
"[blue on white]Blue on white background[/]"
"[bold red]Combined styles[/]"
"[link=https://example.com]Click here[/]"
可直接替换的 Print
from rich import print

print("[bold cyan]Styled text[/]")
print({"key": "value"})  # Auto-pretty-prints

表格

from rich.console import Console
from rich.table import Table

console = Console()

table = Table(title="User List")

table.add_column("ID", style="cyan", justify="right")
table.add_column("Name", style="magenta")
table.add_column("Email", style="green")
table.add_column("Status", justify="center")

table.add_row("1", "Alice", "[email protected]", "✓ Active")
table.add_row("2", "Bob", "[email protected]", "✓ Active")
table.add_row("3", "Charlie", "[email protected]", "✗ Inactive")

console.print(table)

面板

from rich.console import Console
from rich.panel import Panel

console = Console()

# Simple panel
console.print(Panel("Operation completed!"))

# Styled panel
console.print(Panel(
    "[green]All tests passed![/]\n\n"
    "Total: 42 tests\n"
    "Time: 3.2s",
    title="Test Results",
    border_style="green"
))

# Error panel
console.print(Panel(
    "[red]Connection refused[/]\n\n"
    "Host: localhost:5432",
    title="[bold red]Error[/]",
    border_style="red"
))

进度条

简单进度
from rich.progress import track
import time

for item in track(range(100), description="Processing..."):
    time.sleep(0.01)
多个任务
from rich.progress import Progress

with Progress() as progress:
    task1 = progress.add_task("[red]Downloading...", total=100)
    task2 = progress.add_task("[green]Processing...", total=100)

    while not progress.finished:
        progress.update(task1, advance=0.9)
        progress.update(task2, advance=0.6)
        time.sleep(0.02)

语法高亮

from rich.console import Console
from rich.syntax import Syntax

console = Console()

code = '''
def hello():
    print("Hello, World!")
'''

syntax = Syntax(code, "python", theme="monokai", line_numbers=True)
console.print(syntax)

树形显示

from rich.console import Console
from rich.tree import Tree

console = Console()

tree = Tree("[bold blue]MyProject/[/]")
src = tree.add("[bold]src/[/]")
src.add("main.py")
src.add("config.py")

tests = tree.add("[bold]tests/[/]")
tests.add("test_main.py")

console.print(tree)

日志集成

import logging
from rich.logging import RichHandler

logging.basicConfig(
    level=logging.INFO,
    format="%(message)s",
    handlers=[RichHandler(rich_tracebacks=True)]
)

logger = logging.getLogger("myapp")
logger.info("Application started")
logger.error("Connection failed")

美化回溯信息

from rich.traceback import install

# Call once at startup
install(show_locals=True)

# All exceptions now have beautiful tracebacks

常见问题

复用 Console 实例
# ❌ Bad
def show(msg):
    Console().print(msg)  # Creates new instance each time

# ✅ Good
console = Console()
def show(msg):
    console.print(msg)
转义用户输入
from rich.markup import escape

username = "user[admin]"

# ❌ Bad - brackets break markup
console.print(f"[blue]{username}[/]")

# ✅ Good
console.print(f"[blue]{escape(username)}[/]")
处理非 TTY 环境
import sys

console = Console(force_terminal=sys.stdout.isatty())

CLI 应用程序模式

import click
from rich.console import Console
from rich.panel import Panel

console = Console()

@click.command()
@click.argument('filename')
def process(filename):
    console.print(f"[bold]Processing:[/] {filename}")

    with console.status("[bold green]Working..."):
        result = do_work(filename)

    if result.success:
        console.print(Panel(
            f"[green]Processed {result.count} items[/]",
            title="Success"
        ))
    else:
        console.print(f"[red]Error:[/] {result.error}")

不适合使用 Rich 的情况

  • 非交互式脚本(输出被管道重定向)
  • 服务端日志记录
  • 对性能要求极高的循环
  • 依赖项要求精简

相关资源

请参阅 AgentUsage/rich_formatting.md,了解完整文档,包括:

  • 高级表格自定义
  • 微调器和状态显示
  • Console 录制
  • 集成模式

评论

支持 Markdown