---
title: "Python para automação: Scripts que economizam horas"
slug: "python-automacao-scripts"
author: "Mateus Cavalcanti"
publishedAt: "2026-09-13T00:16:38.761Z"
updatedAt: "2026-09-13T00:16:38.762Z"
category: "Automação"
tags:
  - "Automação"
  - "DevOps"
  - "Produtividade"
  - "Python"
  - "Scripts"
---

# 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 streams `stdout` e `stderr`.
- `urllib.request` e `json`: Realização de chamadas HTTP e manipulação de payloads sem dependências como `requests` ou `httpx`.
- `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:

```python
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`:

```python
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

1. **Idempotência**: Garanta que rodar o mesmo script duas vezes não gere duplicidade nem corrompa dados.
2. **Códigos de saída adequados**: Termine com `sys.exit(0)` em caso de sucesso e `sys.exit(1)` em falhas, facilitando integração em pipelines de CI/CD ou crons.
3. **Timeouts explícitos**: Nunca faça chamadas de rede ou subprocessos sem definir `timeout`.
4. **Logs legíveis**: Mensagens claras ajudam qualquer membro do time a debugar a automação em servidores remotos.
