Script Python da riga di comando robusto, con test

Scrivi uno script Python da riga di comando pronto per la produzione: argparse, logging, gestione degli errori, codici di uscita e test pytest. Pensato per ChatGPT, Claude e Microsoft Copilot. Include 6 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.

Intermedio · Codice · In attesa di revisione editoriale

Prompt

Agisci come sviluppatore Python senior che scrive strumenti interni facili da mantenere.

Mi serve uno script da riga di comando chiamato `{{script_name}}` che fa quanto segue: {{task}}.
Input: {{inputs}}.
Output attesi: {{outputs}}.
Versione di Python: {{python_version}}. Dipendenze consentite: {{dependencies}}.

Consegna, in quest'ordine:
1. Progettazione dell'interfaccia: sottocomandi (se hanno senso), argomenti posizionali, opzioni con valori predefiniti e un esempio di output di `--help`.
2. Il codice completo in un unico file, con:
   - `argparse`, `main(argv=None) -> int` e la guardia `if __name__ == "__main__"`.
   - `logging` configurabile con `--verbose` e `--quiet`, messaggi su stderr e risultati su stdout.
   - Type hint completi, `pathlib` per i percorsi e piccole funzioni pure separate dall'I/O.
   - Un flag `--dry-run` se lo script modifica file o sistemi esterni.
   - Codici di uscita documentati (0 successo, 1 errore d'uso, 2 errore sui dati, ecc.).
3. Gestione degli errori: quali eccezioni vengono intercettate, messaggi chiari per l'utente e nessun traceback se non in modalità verbose.
4. Test `pytest` (con `tmp_path` e `capsys`) per il percorso principale, gli input non validi e i casi limite.
5. Istruzioni d'uso e come impacchettarlo con `pyproject.toml` come comando installabile.

Vincoli:
- Segui PEP 8 e non usare dipendenze al di fuori dell'elenco consentito.
- Non dare per scontati formati di dati che non ho descritto: chiedimeli oppure usa [DA COMPLETARE].

Come usarlo

  1. Spiega il compito con un esempio reale di input e output.
  2. Indica se puoi installare dipendenze o devi restare nella libreria standard.
  3. Salva lo script e i test ed esegui pytest prima di usarlo su dati reali.
  4. Provalo sempre prima con --dry-run.

Esempio d'uso

Script: rinomina-fatture · Compito: rinominare i PDF delle fatture usando data e fornitore presenti in un CSV · Solo libreria standard.

Esempio di risultato

2. Codice (estratto di rinomina_fatture.py)

from __future__ import annotations

import argparse
import csv
import logging
import sys
from pathlib import Path

log = logging.getLogger("rinomina-fatture")


def nuovo_nome(data: str, fornitore: str) -> str:
    """Funzione pura: '2025-03-14', 'Cartoleria Sole' -> '2025-03-14_cartoleria-sole.pdf'."""
    return f"{data}_{'-'.join(fornitore.lower().split())}.pdf"


def leggi_csv(percorso: Path) -> dict[str, str]:
    with percorso.open(newline="", encoding="utf-8") as f:
        return {riga["file"]: nuovo_nome(riga["data"], riga["fornitore"]) for riga in csv.DictReader(f)}


def main(argv: list[str] | None = None) -> int:
    p = argparse.ArgumentParser(prog="rinomina-fatture", description="Rinomina i PDF delle fatture da un CSV.")
    p.add_argument("cartella", type=Path)
    p.add_argument("csv", type=Path)
    p.add_argument("--dry-run", action="store_true", help="mostra le modifiche senza applicarle")
    livello = p.add_mutually_exclusive_group()
    livello.add_argument("-v", "--verbose", action="store_true")
    livello.add_argument("-q", "--quiet", action="store_true")
    args = p.parse_args(argv)
    logging.basicConfig(level=logging.DEBUG if args.verbose else logging.ERROR if args.quiet else logging.INFO)

    try:
        modifiche = leggi_csv(args.csv)
    except (OSError, KeyError) as e:
        log.error("Impossibile leggere il CSV: %s", e)
        return 2
    for vecchio, nuovo in modifiche.items():
        origine, destinazione = args.cartella / vecchio, args.cartella / nuovo
        if not origine.exists() or destinazione.exists():
            log.warning("Saltato: %s", vecchio)
            continue
        print(f"{vecchio} -> {nuovo}")
        if not args.dry_run:
            origine.rename(destinazione)
    return 0


if __name__ == "__main__":
    sys.exit(main())

Codici di uscita: 0 successo, 1 errore d'uso (argparse restituisce 2 di default: [DA COMPLETARE] se vuoi uniformarli), 2 errore nei dati. Il formato della data nel CSV non è descritto: [DA COMPLETARE]…

Dati chiave

Categoria
Programmazione e sviluppo · Python
Tipo di output
Codice
Livello
Intermedio
Pensato per
ChatGPT, Claude e Microsoft Copilot
Verificato in
In attesa di verifica editoriale
Variabili
Nome dello script, Compito, Input, Output, Versione di Python e Dipendenze consentite
Lingua
Italiano
Prezzo
Gratuito, senza registrazione
Aggiornato
07/11/2026

Domande frequenti

Perché argparse invece di Click o Typer?

Argparse è incluso in Python e non aggiunge dipendenze, il che aiuta sui server con restrizioni. Se puoi installare pacchetti, indica Typer o Click tra le dipendenze consentite e il prompt si adatterà.

Cosa guadagno separando la logica dall'I/O?

Puoi testare la logica con test veloci che non toccano file reali e riutilizzarla in altri script o in una API.

A cosa serve questo prompt?

Scrivi uno script Python da riga di comando pronto per la produzione: argparse, logging, gestione degli errori, codici di uscita e test pytest.

Con quali strumenti di IA funziona?

È pensato per ChatGPT, Claude e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.

Come personalizzo il prompt?

Clicca su «Personalizza» e compila le variabili (Nome dello script, Compito, Input, Output, Versione di Python e Dipendenze consentite). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.

Serve esperienza per usarlo?

È di livello intermedio: conviene conoscere l'argomento per fornire un buon contesto e valutare il risultato con occhio critico.

Questo prompt è gratuito?

Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.

Posso fidarmi dell'output dell'IA?

Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.

Prompt correlati