Saída Rica
Rich renderiza texto formatado, tabelas, barras de progresso e realce de sintaxe no terminal. Ele torna a saída de CLI legível sem sacrificar a capacidade de script.
Receita
uv add richfrom rich.console import Console
console = Console()
console.print("[bold green]Sucesso![/bold green] Implantado v1.2.3")Quando usar isso:
- Saída de CLI voltada para humanos (tabelas, painéis de status)
- Operações de longa duração que necessitam de barras de progresso
- Exibição de configuração ou logs com realce de sintaxe
Exemplo de Trabalho
from rich.console import Console
from rich.table import Table
from rich.progress import track
from rich.syntax import Syntax
import time
console = Console()
def show_users(users: list[dict]):
table = Table(title="Usuários Ativos")
table.add_column("ID", style="cyan", justify="right")
table.add_column("Email")
table.add_column("Papel", style="magenta")
for u in users:
table.add_row(str(u["id"]), u["email"], u["role"])
console.print(table)
def process_files(paths: list[str]):
for path in track(paths, description="Processando..."):
time.sleep(0.1) # simula trabalho
console.print("[green]Concluído![/green]")
def show_config(yaml_text: str):
syntax = Syntax(yaml_text, "yaml", theme="monokai", line_numbers=True)
console.print(syntax)O que isso demonstra:
- Tabelas com colunas estilizadas para dados estruturados
track()envolve iteráveis com uma barra de progressoSyntaxrealça arquivos de código e configuração- Marcação
[green]para estilo inline
Mergulho Profundo
Modos de Saída
| Modo | Uso |
|---|---|
| Tabela Rich | Inspeção humana |
| JSON para stdout | Análise de máquina (flag --json) |
| stderr para logs | Manter stdout canalizável |
Console(soft_wrap=True) | Terminais estreitos |
Armadilhas
- Saída Rich em comandos canalizados - Códigos ANSI em arquivos. Correção:
Console(force_terminal=False)ou flag--plain. - Barra de progresso no stderr - Padrão correto. Correção: não redirecionar o progresso para stdout.
- Tabelas para consumo de script - Quebra a análise. Correção: flag
--jsonpara saída de máquina; Rich para o modo humano padrão. - Logging via print - Sem níveis ou timestamps. Correção:
rich.logging.RichHandlerpara logs estruturados. - Tabelas enormes - Transbordamento do terminal. Correção: paginar ou limitar linhas com a flag
--limit.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Impressão simples | Apenas saída scriptável | Painel voltado para o usuário |
| tabulate | Tabelas simples, sem cores | Barras de progresso necessárias |
| tqdm | Apenas progresso | Conjunto completo de formatação |
FAQs
Saída Rich ou simples?
Rich para uso humano interativo. Adicione --json ou --plain para automação.
Rich funciona no Windows?
Sim. O Windows Terminal suporta cores ANSI. O cmd legado pode precisar de colorama.
Como fazer log com Rich?
logging.basicConfig(handler=RichHandler(), level=logging.INFO).
Rich pode renderizar Markdown?
from rich.markdown import Markdown; console.print(Markdown(text)).
Como testar a saída Rich?
Console(file=StringIO()) captura a saída para asserções.
Painéis ao vivo?
from rich.live import Live para exibir atualizações.
Rich em Click/Typer?
Compatível. Use click.echo para texto simples; Console Rich para saída complexa.
Como desativar cores?
Console(no_color=True) ou variável de ambiente NO_COLOR=1.
Visualizações de árvore?
from rich.tree import Tree para exibição hierárquica.
Desempenho em saídas grandes?
Transmitir ou paginar. Não crie tabelas de um milhão de linhas.
Relacionado
- Noções Básicas de CLI - convenções stdout/stderr
- Click - Integração com framework de CLI
- Prompts Interativos - entrada do usuário
- Melhores Práticas de CLI - diretrizes de saída
Versões da Pilha: Esta página foi escrita para Python 3.14.0, FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.