
Il modulo argparse in Python
Nel linguaggio Python il modulo argparse è utilizzato per creare dei parser, delle interfacce a riga di comando (CLI) in cui puoi passare dei valori a dei parametri specifici.
A cosa serve? Ti consente di analizzare gli argomenti della riga di comando che hai passato al tuo programma. Ad esempio, se chiami un programma
python script.py --nome "Mario"
Il modulo riconosce che stai passando l'informazione "Mario" e vuoi assegnarlo al parametro "nome".
Vediamo come funziona facendo un esempio pratico.
Per prima cosa devi devi importare il modulo `argparse` nel tuo programma.
import argparse
A questo punto puoi creare il parser definendo un oggetto tramite ArgumentParser.
Ad esempio, definisci l'oggetto chiamato "parser". Questo oggetto gestirà l'analisi dei comandi da linea di comando.
parser = argparse.ArgumentParser(description='Descrizione del tuo programma')
Poi, aggiungi gli argomenti che il tuo programma può accettare tramite il metodo add.argument.
Gli argomenti devono essere dichiarati uno alla volta e formano il namespace degli argomenti del parser.
Possono essere argomenti obbligatori o opzionali. Ad esempio:
parser.add_argument('numero', type=int, help='Un numero intero')
In questo caso "numero" è un argomento posizionale, ovvero dipende dalla posizione dei parametri, ed è un valore di tipo intero (int).
Nella voce 'Help' puoi aggiungere un'eventuale descrizione del parametro.
Volendo puoi anche limitare i valori all'interno di un range usando il parametro choices. Ad esempio, per definire il range tra 0 e 5 scrivi:
parser.add_argument('numero', type=int, help='Un numero intero', choices=range(5))
Adesso definisci un altro argomento. Ad esempio:
parser.add_argument('--nome', help='Un argomento opzionale')
In quest'altro caso "--nome" è un argomento opzionale ossia è legato a una opzione.
Informiamo il parser che dovrà prendere un argomento nella linea di comando associato all'attributo "nome".
Quando assegni un nome al parametro, non importa in quale posizione viene documentato nella linea comando. Inoltre, è sempre un parametro facoltativo. Quindi, può anche mancare. Puoi comunque renderlo obbligatorio specificando l'opzione required=True
parser.add_argument('--nome', help='Un argomento obbligatorio', required=True)
In alternativa, puoi assegnargli un valore di default tramite il parametro default.
parser.add_argument('--nome', help='Un argomento opzionale', default='Anonymous')
Infine, chiama il metodo parse_args() per convertire gli argomenti della riga di comando in un oggetto con attributi.
args = parser.parse_args()
Dopo aver analizzato gli argomenti, puoi accedervi come attributi dell'oggetto "args" seguito da un punto e dal nome dell'argomento. Ad esempio:
print(args.numero)
print(args.nome)
Ecco un esempio pratico di utilizzo completo.
Scrivi questo programma e salvalo con il nome "script.py" sul tuo computer.
- import argparse
- # Crea il parser
- parser = argparse.ArgumentParser(description='Esempio di programma.')
- # Aggiungi gli argomenti
- parser.add_argument('numero', type=int, help='Un numero intero')
- parser.add_argument('--nome', help='Un nome opzionale')
- # Analizza gli argomenti
- args = parser.parse_args()
- # Usa gli argomenti
- print('Numero:', args.numero)
- if args.nome:
- print('Nome:', args.nome)
Quando esegui questo script da linea di comando, puoi passare un numero e, opzionalmente, un nome:
Ad esempio chiama il programma in questo modo
python script.py 5 --nome "Mario"
Lo script recepisce i parametri.
In questo caso, il primo valore (5) è associato a numero perché è in prima posizione. Il secondo valore ("Mario") è, invece, associato specificatamente al campo "nome".
Infine, il programma stampa gli argomenti sullo schermo.
Numero: 5
Nome: Mario
Se chiami il programma indicando solo il parametro 5, lo script funziona lo stesso perché l'attributo "nome" è facoltativo.
python script.py 5
Numero: 5
Viceversa, se non indichi il primo argomento (5), lo script va in errore perché è un parametro obbligatorio.
python script.py --nome "Mario"
usage: script.py [-h] [--nome NOME] numero
script.py: error: the following arguments are required: numero
Se hai documentato gli attributi "help" degli argomenti, puoi anche visualizzare un help in linea dello script.
Ad esempio, esegui il tuo programma aggiungendo lo switch -h
python script.py --nome "Mario"
In quest'ultimo caso lo script mostra una guida con l'elenco degli argomenti che può accettare.
usage: script.py [-h] [--nome NOME] numero
Esempio di programma.
positional arguments:
numero Un numero intero
options:
-h, --help show this help message and exit
--nome NOME Un nome opzionale
In questo modo puoi gestire facilmente il passaggio di tutti parametri al programma, sia obbligatori che facoltativi.