Python para automação: Scripts que economizam horas
Quando o objetivo é criar ferramentas de automação para o dia a dia, muitas pessoas recorrem imediatamente a pacotes externos no PyPI. No entanto, a biblioteca padrão do Python (standard library) já oferece tudo o que é necessário para construir ferramentas rápidas, portáveis e com manutenção trivial — sem precisar criar ambientes virtuais nem gerenciar pip install.
Abaixo, reunimos os principais módulos e dois scripts práticos que você pode utilizar imediatamente.
O kit mínimo essencial da biblioteca padrão
pathlib: Manipulação orientada a objetos de caminhos e arquivos no sistema operacional.argparse: Construção de interfaces de linha de comando (CLI) com flags, descrições e validações automáticas.subprocess: Execução e controle de comandos do sistema com captura de streamsstdoutestderr.urllib.requestejson: Realização de chamadas HTTP e manipulação de payloads sem dependências comorequestsouhttpx.csv: Leitura e escrita estruturada de dados tabulares.
Exemplo 1: Gerador de inventário e auditoria de arquivos
Este script vasculha um diretório recursivamente, calcula tamanhos de arquivos e exporta um relatório em CSV:
import argparse
import csv
from pathlib import Path
def generate_inventory(target_dir: str, output_csv: str) -> None:
root = Path(target_dir).resolve()
if not root.is_dir():
raise SystemExit(f"Erro: O diretório '{target_dir}' não existe.")
rows = []
total_bytes = 0
for file_path in root.rglob("*"):
if file_path.is_file():
size = file_path.stat().st_size
total_bytes += size
rows.append([str(file_path.relative_to(root)), size, file_path.suffix])
with open(output_csv, "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["caminho_relativo", "tamanho_bytes", "extensao"])
writer.writerows(rows)
print(f"✅ Inventário concluído: {len(rows)} arquivos ({total_bytes / (1024*1024):.2f} MB).")
print(f"📄 Arquivo gerado em: {output_csv}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Auditoria e inventário de arquivos")
parser.add_argument("dir", help="Caminho do diretório a inspecionar")
parser.add_argument("--out", default="inventory.csv", help="Nome do arquivo CSV de saída")
args = parser.parse_args()
generate_inventory(args.dir, args.out)
Exemplo 2: Monitor de Health Check de APIs com Retry e Notificação
Precisa validar se múltiplos serviços estão online sem instalar nada além do Python? Use urllib.request:
import json
import time
from urllib.error import URLError, HTTPError
from urllib.request import Request, urlopen
SERVICES = [
{"name": "Site Principal", "url": "https://mateusjunior.dev"},
{"name": "API Health", "url": "https://api.github.com"},
]
def check_service(name: str, url: str, timeout: int = 5) -> bool:
req = Request(url, headers={"User-Agent": "AutomationBot/1.0"})
try:
with urlopen(req, timeout=timeout) as response:
return 200 <= response.status < 400
except (HTTPError, URLError, TimeoutError):
return False
def run_health_checks():
print(f"🔎 Iniciando verificação de serviços em {time.strftime('%Y-%m-%d %H:%M:%S')}...")
for service in SERVICES:
status = check_service(service["name"], service["url"])
badge = "🟢 ONLINE" if status else "🔴 OFFLINE"
print(f"[{badge}] {service['name']} -> {service['url']}")
if __name__ == "__main__":
run_health_checks()
Boas práticas para scripts de automação duradouros
- Idempotência: Garanta que rodar o mesmo script duas vezes não gere duplicidade nem corrompa dados.
- Códigos de saída adequados: Termine com
sys.exit(0)em caso de sucesso esys.exit(1)em falhas, facilitando integração em pipelines de CI/CD ou crons. - Timeouts explícitos: Nunca faça chamadas de rede ou subprocessos sem definir
timeout. - Logs legíveis: Mensagens claras ajudam qualquer membro do time a debugar a automação em servidores remotos.