1.3.1 - Il modulo argparse
¶
Il modulo argparse
ci permette di passare ad uno script Python degli argomenti utilizzando la riga di comando.
Per farlo, dobbiamo seguire un processo articolato in quattro step:
- creiamo un oggetto di classe
ArgumentParser
; - aggiungiamo gli argomenti di cui intendiamo fare il parsing;
- effettuiamo il parsing di questi argomenti;
- usiamo gli argomenti passati.
Come molte cose in Python, è più complesso descrivere questa serie di passaggi che implementarla. Di conseguenza, usiamo il solito approccio learn by doing, usando un semplice esempio.
Supponiamo di avere una classe Persona
, definita come segue:
Scriviamo adesso uno script per creare un oggetto di questa classe, specificandone i parametri mediante riga di comando. Per prima cosa, importiamo la libreria argparse
:
Definiamo quindi un metodo che accetti come parametro un generico insieme di argomenti (che chiameremo args
), e che crei al suo interno un'istanza di Persona
a partire da questi argomenti.
Possiamo adesso definire il punto di accesso al nostro script come segue:
In particolare:
- alla riga 2, creeremo un oggetto di tipo
ArgumentParser
, che chiameremoparser
; - alla riga 3, aggiungeremo un primo argomento (il nome) al
parser
mediante il metodoadd_argument()
; - alla riga 4, aggiungeremo un flag che contrassegnerà l'argomento;
- alla riga 5, aggiungeremo un nome per indicare l'argomento;
- alla riga 6, andremo a definire un messaggio di aiuto mediante il parametro
help
che descriverà a cosa serve l'argomento; - alla riga 7, assegneremo un valore di default all'argomento relativo al nome della persona;
- alla riga 8, creeremo un secondo argomento, ovvero il cognome, aggiungendolo al parser;
- alla riga 12, specificheremo che l'argomento
cognome
è richiesto settando il parametrorequired
aTrue
; - alla riga 13, andremo ad effettuare il parsing degli argomenti passati, salvandoli in una variabile chiamata
args
; - infine, alla riga 14, passeremo la variabile
args
al metodorun()
definito in precedenza.
La variabile args
La variabile args
definisce un oggetto di tipo Namespace
all'interno del quale sono salvati tutti gli argomenti passati allo script, ciascuno dei quali invocabile con la notazione args.nome_argomento
.
Utilizzare l'help
Definire il parametro help
ci permette di usare il comando python nome_script -h
, che ci restituisce le righe di aiuto specificate durante il parsing. Di conseguenza, è opportuno evitare di inserire dei flag del tipo -h
, onde evitare collisioni ed errori del parser.
Salviamo il nostro codice in uno script chiamato run.py
. Per eseguirlo, sfrutteremo i flag -n
e -c
per specificare rispettivamente nome e cognome:
A schermo vedremo:
Possiamo anche omettere il nome, ma non il cognome, in quanto è un parametro richiesto:
Possiamo poi invocare l'help scrivendo:
Proviamo infine ad utilizzare la notazione completa:
Proviamo adesso a modificare la classe Persona
inserendovi l'età. In tal senso, specifichiamo che l'età deve essere un valore intero; qualora questo non avvenga, sarà lanciata un'eccezione.
Modifichiamo il resto dello script per adattarci alle nuove esigenze. Partiamo dal metodo run
:
Aggiungiamo poi un altro argomento al parser
:
Proviamo ad eseguire di nuovo lo script:
Vedremo che viene lanciato un errore, in quanto gli argomenti passati mediante argparse sono normalmente interpretati come delle stringhe.
Per risolvere questo problema dovremo specificare il parametro type
, ponendolo ad int
:
Se proviamo ad eseguire nuovamente lo script non riscontreremo alcun errore.