Python 3 - Lezioni su Concetti Intermedi

09: Il Modulo ArgParse pt.1

In questa nuova lezione introduciamo argparse, il modulo della Standard Library dedicato e raccomandato per l'analisi di argomenti e opzioni passati tramite riga di comando.

Fin'ora, per questo scopo abbiamo visto la funzione argv del modulo sys (lezione dedicata) e bene, diciamo che il modulo argparse porta il tutto ad un livello qualitativamente superiore.

import argparse

def calcolatrice(n1, n2, operazione):
    if operazione == "add":
        return n1 + n2
    elif operazione == "sot":
         return n1 - n2
    elif operazione == "mol":
        return n1 * n2
    elif operazione == "div":
        return n1 / n2

Per utilizzare il modulo, come di consueto anzitutto dobbiamo importarlo. Quindi, la prima cosa che dobbiamo fare è creare un oggetto di tipo Argument Parser, a cui poi associeremo gli argomenti che vogliamo utilizzare.

parser = argparse.ArgumentParser(description="Semplice Calcolatrice per addizioni, sottrazioni, moltiplicazioni e divisioni")

Il nome parser è convenzionale, e tra le parentesi potete passare svariati parametri opzionali come Descrizione, Utilizzo ecc, vi lascio qui un link alla Documentazione Ufficiale in cui potrete trovare l'elenco completo dei parametri che potete passare al vostro parser.

Quindi, analizziamo un po la nostra funzione calcolatrice.

Come vediamo per farla funzionare correttamente abbiamo bisogno di due numeri n1 ed n2, e di una tipologia di operazione da svolgere. Dobbiamo quindi iniziare ad aggiungere argomenti al nostro parser, tramite il metodo add_argument().

Anche in questo caso tra le parentesi possiamo passare svariati parametri

Ma noi per ora ci limiteremo al nome del parametro, la tipologia di parametro che ci aspettiamo(di default argparse tratta gli argomenti come stringhe), ed help a cui associamo una breve descrizione del parametro stesso.

parser.add_argument("n1", type=float, help="Primo Numero")
parser.add_argument("n2", type=float, help="Secondo Numero")
parser.add_argument("operazione", type=str, help="Operazione consentite: add | sot | mol | div")

Quindi una volta definiti gli argomenti che ci interessano, possiamo effettuare l'assegnazione vera e propria tramite il metodo parse_args(), in questo modo:

args = parser.parse_args()

Ottimo, ci siamo. A questo punto siamo pronti a richiamare la nostra calcolatrice con i nostri nuovi parametri!

risultato = calcolatrice(args.n1, args.n2, args.operazione)

Andiamo subito nella shell di sistema e proviamo anzitutto a richiamare lo script senza parametri e vediamo cosa otteniamo:

pymike@programmareinpython:~/Desktop/lezione_argparse$ python3.6 ./calc_argparse.py
usage: calc_argparse.py [-h] n1 n2 operazione
calc_argparse.py: error: the following arguments are required: n1, n2, operazione

Otteniamo un errore in cui veniamo informati degli argomenti di cui abbiamo bisogno, n1, n2 e operazione.

Come vedetre si tratta comunque di un messaggio d'errore piuttosto utile, e notiamo anche che abbiamo un'opzione aggiuntiva, -h, abbreviativa di --help. Si tratta di una funzione di aiuto che otteniamo come si suol dire "for free", ovvero non dobbiamo preoccuparci di scriverla noi perché ci ha già pensato chi ha scritto il modulo argparse. Testiamola.

pymike@programmareinpython:~/Desktop/lezione_argparse$ python3.6 ./calc_argparse.py -h
usage: calc_argparse.py [-h] n1 n2 operazione

Semplice calcolatrice per addizioni, sottrazioni, moltiplicazioni e divisioni

positional arguments:
    n1          Primo Numero
    n2          Secondo Numero
    operazione  Operazione consentite: add | sot | mol | div

optional arguments:
    -h, --help  show this help message and exit

Piuttosto piacevole da leggere non trovate? Proviamo peró ora ad utilizzare la calcolatrice vera e propria:

pymike@programmareinpython:~/Desktop/lezione_argparse$ python3.6 ./calc_argparse.py 13 47 mol
611.0

Per rendere la nostra calcolatrice un pò più robusta possiamo in verità restringere la scelta delle operazioni che è possibile effettuare a quelle che la nostra calcolatrice è in grado di processare, in questo modo, utilizzando :

parser.add_argument("operazione", type=str, help="Tipo di Operazione", choices = ["add", "sot", "mol", "div"])

E quindi :

pymike@programmareinpython:~/Desktop/lezione_argparse$ python3.6 ./calc_argparse.py --help
usage: calc_argparse.py [-h] n1 n2 {add,sot,mol,div}

Semplice calcolatrice per addizioni, sottrazioni, moltiplicazioni e divisioni

positional arguments:
    n1                 Primo Numero
    n2                 Secondo Numero
    {add,sot,mol,div}  Tipo di Operazione

optional arguments:
    -h, --help         show this help message and exit

Provando a lanciare un comando che la calcolatrice non gestisce otteniamo un messaggio piuttosto utile:

pymike@programmareinpython:~/Desktop/lezione_argparse$ python3.6 ./calc_argparse.py 33 3 asd
usage: calc_argparse.py [-h] n1 n2 {add,sot,mol,div}
calc_argparse.py: error: argument operazione: invalid choice: 'asd' (choose from 'add', 'sot', 'mol', 'div')

Come al solito, Happy Coding!

Menu della Serie