Ti sei mai chiesto come eseguire uno script Python usando gli argomenti della CLI? In questo articolo scopriremo come fare!
Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!
Immagina di avere uno script Python che si chiami “ilMioScript.py”, al suo interno hai una funzione che effettua una semplice somma, per intenderci:
def somma(a, b):
print(f"La somma dei due numeri è: {a + b}")
Tuttavia hai la necessità di usare gli argomenti della CLI.
Detto in termini meno tecnichesi, ti piacerebbe lanciare il tuo script da una finestra terminale inserendo direttamente questi due numeri nella CLI.
Per farla semplice qualcosa come:
python ilMioScript.py 5 6
E come output aspettarti:
La somma dei due numeri è: 11
La cosa è fattibile, anzi fattibilissima.
Per poterlo fare, dobbiamo utilizzare la libreria sys e la magica potenza di “if __name__ == “__main__” che se non sai cosa fa, ti invito a cliccare proprio dove l’ho scritto 😀
La libreria sys invece, ci permette di carpire gli argomenti della CLI e usarli all’interno del nostro script!
Per intenderci:
if __name__ == "__main__":
a = int(sys.argv[1])
b = int(sys.argv[2])
Avrai fatto sicuramente caso al fatto che ho invocato il parametro “argv”.
Questo parametro, contiene tutti gli argomenti della CLI inseriti quando eseguiamo il nostro script Python a finestra terminale.
E avrai fatto sicuramente caso al fatto che è un vettore.
In estrema sintesi, “sys.argv” quando vogliamo eseguire il nostro script Python conterrà tutti gli argomenti della CLI da noi stessi inseriti.
E indovina un po’? Esattamente: vanno in ordine di scrittura.
In altre parole, tornando all’introduzione di prima:
python ilMioScript.py 4 5
“sys.argv[1]” conterrà “4”, mentre “sys.argv[2]” conterrà 5.
Perciò, per arrivare al nostro esempio completo:
#importiamo la libreria
import sys
#dichiariamo la funzione
def somma(a, b):
print(f"La somma dei due numeri è: {a + b}")
#realizziamo il codice necessario ad eseguire lo script come main
if __name__ == "__main__":
#recuperiamo i valori degli argomenti inseriti a CLI
a = int(sys.argv[1])
b = int(sys.argv[2])
#eseguiamo la nostra funzione
somma(a, b)
Ah giusto, per completezza: li ho “castati” a int.
Perché? Beh, diciamo che una funzione che somma due numeri non funziona troppo bene con delle stringhe 😀
Tuttavia non è l’unica soluzione, ne possiamo usare una un po’ più avanzata ecco.
Come eseguire script Python usando gli argomenti della CLI e dandogli un nome!
Ti piacerebbe eseguire lo script dando un nome ai tuoi argomenti? Per intenderci qualcosa come:
python ilMioScript.py --valore1=2 --valore2=3
Questa volta dobbiamo usare la libreria “argparse”.
Il suo funzionamento è pressoché identico a “sys”, tuttavia permette di dare un nome agli argomenti della CLI, persino un tipo e addirittura un valore di default!
Per farla breve, basta adattare le seguenti modifiche allo script precedente:
import argparse
def hello(a,b):
print(f"La somma dei due numeri è: {a + b}")
if __name__ == "__main__":
#Imposto una descrizione per lo script
parser = argparse.ArgumentParser(description='Script usato per fare la somma.')
#Imposto i due argomenti della CLI con nome, tipo e valore di default
parser.add_argument("--valore1", type=int, default=1)
parser.add_argument("--valore2", type=int, default=2)
#Eseguo il parsing degli argomenti
args = parser.parse_args()
#Li associo a due variabili
a = args.valore1
b = args.valore2
hello(a, b)