Noções Básicas de Scripting
10 exemplos para você começar com System Scripting - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para você começar com System Scripting - 7 básicos e 3 intermediários.
uv venv && source .venv/bin/activate
# apenas stdlib para a maioria dos exemplos; typer opcional:
uv pip install "typer>=0.15"Proteja efeitos colaterais para que as importações permaneçam seguras.
def main() -> int:
print("executando")
return 0
if __name__ == "__main__":
raise SystemExit(main())main() retorna o código de saída inteiro para cron e CI.raise SystemExit evita sys.exit em código adjacente à biblioteca.Relacionado: Scripts Robustos - códigos de saída e logging
Analise flags e argumentos posicionais sem dependências extras.
import argparse
def main() -> int:
parser = argparse.ArgumentParser(description="Arquivar logs")
parser.add_argument("--dry-run", action="store_true")
parser.add_argument("path")
args = parser.parse_args()
print(args.path, args.dry_run)
return 0
if __name__ == "__main__":
raise SystemExit(main())action="store_true" para flags booleanas.ArgumentParser.add_argument para regras complexas.Relacionado: Automação de Arquivos e Diretórios - manipulação de caminhos
Caminhos orientados a objetos superam a concatenação de strings.
from pathlib import Path
root = Path("data")
for csv in root.glob("**/*.csv"):
print(csv.resolve())/ une segmentos de caminho de forma portátil.glob("**/*.csv") percorre recursivamente com ** (siga links simbólicos com cuidado)..read_text(encoding="utf-8") em vez de open() quando o arquivo inteiro couber na memória.Relacionado: Automação de Arquivos e Diretórios - escritas seguras
Logs estruturados sobrevivem a e-mails do cron e agregadores de logs.
import logging
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(message)s")
log = logging.getLogger("backup")
def main() -> int:
log.info("iniciando backup")
return 0--verbose.Relacionado: Scripts Robustos - logging operacional
Chamadores distinguem modos de falha por status de saída.
EXIT_OK = 0
EXIT_USAGE = 2
EXIT_FAIL = 1
def main() -> int:
return EXIT_OK--help ou README para operadores.2 comumente sinaliza erros de uso (argparse usa isso).Relacionado: Scripts Robustos - tratamento de falhas
Leia a configuração do ambiente para scripts 12-factor.
import os
API_URL = os.environ.get("API_URL", "https://api.example.com")
TOKEN = os.environ["API_TOKEN"] # obrigatório - gera KeyError se ausenteRelacionado: Trabalhando com APIs e Webhooks - chamadas autenticadas
Delegue a ferramentas externas com listas de argumentos explícitas.
import subprocess
def run_git_status() -> int:
proc = subprocess.run(["git", "status", "--short"], check=False)
return proc.returncodeshell=True a menos que seja inevitável.check=False permite que você mapeie os códigos de retorno.capture_output=True ao analisar resultados.Relacionado: subprocess e Interoperabilidade com Shell - captura e timeouts
CLI tipada com menos boilerplate do que o argparse puro.
import typer
app = typer.Typer()
@app.command()
def greet(name: str, loud: bool = False) -> None:
msg = f"olá {name}"
typer.echo(msg.upper() if loud else msg)
if __name__ == "__main__":
app()uv run script.py na tabela de scripts do pyproject.toml.Relacionado: Agendamento e Cron - CLIs typer agendadas
Mescle padrões, configuração de arquivo e flags de CLI (o último vence).
from dataclasses import dataclass
@dataclass
class Config:
retries: int = 3
dry_run: bool = False
def resolve_config(cli_retries: int | None, base: Config) -> Config:
if cli_retries is not None:
return Config(retries=cli_retries, dry_run=base.dry_run)
return baseConfig imutáveis simplificam os testes.Relacionado: Scripts Robustos - modo dry-run
Pule o trabalho quando a saída já existir, a menos que --force.
from pathlib import Path
def build_report(out: Path, force: bool) -> int:
if out.exists() and not force:
print(f"pulando existente {out}")
return 0
out.write_text("dados do relatório\n", encoding="utf-8")
return 0--force documenta a substituição intencional.Relacionado: Automação de Arquivos e Diretórios - escritas atômicas
Versões da Stack: Esta página foi escrita para Python 3.14.0 (3.14 estável, 3.13 de manutenção), 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+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026