Le interfacce a riga di comando (CLI) sono uno dei modi più rapidi ed efficaci per interagire con il software. Consentono di eseguire comandi direttamente, garantendo un’esecuzione più veloce e funzionalità avanzate. Gli sviluppatori creano spesso CLI in Python per diverse applicazioni, utility e script di automazione, permettendo così di elaborare dinamicamente l’input dell’utente. È qui che entra in gioco il modulo argparse di Python.
Il modulo argparse semplifica la gestione degli input da riga di comando e permette agli sviluppatori di creare strumenti interattivi e facili da usare. Essendo parte della libreria standard, consente di definire, elaborare e validare gli input senza dover scrivere logiche complesse.
In questo articolo analizzeremo i concetti principali, esempi utili e funzionalità avanzate del modulo argparse per permetterti di iniziare subito a costruire strumenti CLI solidi.
Importa il modulo nel tuo script Python:
import argparse
Questo abilita l’analisi degli argomenti passati dalla riga di comando.
La classe ArgumentParser è la classe più essenziale dell’API del modulo argparse. Per usarla, crea un’istanza:
parser = argparse.ArgumentParser(description="A Hostman tutorial on Python argparse.")
Qui:
description spiega cosa fa il programma e viene mostrata quando si esegue --help.
Definisci i parametri che il programma accetta tramite add_argument():
parser.add_argument('filename', type=str, help="Name of the file to process")
parser.add_argument('--verbose', action='store_true', help="Enable verbose mode")
Spiegazione:
filename è obbligatorio.
--verbose è opzionale e abilita la modalità dettagliata.
Elabora gli argomenti forniti tramite:
args = parser.parse_args()
I valori elaborati vengono memorizzati come attributi dell’oggetto args.
Esempio:
print(f"File to process: {args.filename}")
if args.verbose:
print("Verbose mode enabled")
else:
print("Verbose mode disabled")
python3 file.py example.txt
python3 file.py example.txt --verbose
python3 file.py --help
Alcuni argomenti opzionali necessitano di valori predefiniti. In questo esempio, --timeout ha un valore predefinito di 30 secondi:
import argparse
parser = argparse.ArgumentParser(description="Demonstrating default argument values.")
parser.add_argument('--timeout', type=int, default=30, help="Timeout in seconds (default: 30)")
args = parser.parse_args()
print(f"Timeout value: {args.timeout} seconds")
Spiegazione
Importazione del modulo
Creazione dell’istanza di ArgumentParser
Aggiunta dell’argomento --timeout con valore predefinito
Parsing tramite parse_args()
Caso 1: uso del valore predefinito
python file.py
Caso 2: valore personalizzato
python file.py --timeout 60
Il parametro choices limita un argomento a un insieme di valori validi:
parser.add_argument('--mode', choices=['basic', 'advanced'], help="Choose the mode of operation")
Caso 1: valore valido
python3 file.py --mode basic
Caso 2: nessun input
python3 file.py
Caso 3: valore non valido
python3 file.py --mode intermediate
Il parametro nargs='+' consente di accettare più valori come lista:
parser.add_argument('--numbers', nargs='+', type=int, help="List of numbers to process")
Caso 1: più numeri
python3 file.py --numbers 10 20 30
Caso 2: un numero
python3 file.py --numbers 5
Caso 3: nessun input
python3 file.py
Caso 4: input non valido
python3 file.py --numbers 10 abc 20
Gli argomenti opzionali (quelli che iniziano con --) non sono obbligatori per impostazione predefinita. Tuttavia, puoi renderli obbligatori usando required=True:
parser.add_argument('--config', required=True, help="Path to the configuration file")
Caso 1: input valido
python3 file.py --config settings.json
Caso 2: mancanza dell’argomento obbligatorio
python3 file.py
parser.add_argument('--debug', action='store_true', help="Enable debugging mode")
group = parser.add_argument_group('File Operations')
group.add_argument('--input', type=str, help="Input file")
group.add_argument('--output', type=str, help="Output file")
group = parser.add_mutually_exclusive_group()
group.add_argument('--json', action='store_true', help="Output in JSON format")
group.add_argument('--xml', action='store_true', help="Output in XML format")
Il modulo argparse semplifica la creazione di CLI affidabili per gestire gli argomenti passati ai programmi Python. Dalle opzioni più semplici alle funzionalità avanzate come choices e nargs, gli sviluppatori possono costruire strumenti potenti, intuitivi e facili da mantenere. Dare nomi chiari agli argomenti e scrivere descrizioni corrette rende gli script più leggibili e manutenzionabili.