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
- Spiega il compito con un esempio reale di input e output.
- Indica se puoi installare dipendenze o devi restare nella libreria standard.
- Salva lo script e i test ed esegui
pytestprima di usarlo su dati reali. - 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.