Parametri da riga di comando: SYS.ARGV
In questa lezione vedremo come passare parametri al nostro script tramite riga di comando, usando la funzione argv del modulo sys.
L'acronimo argv sta per argument variable: si tratta semplicemente di una lista di stringhe contenente i parametri che vengono passati allo script quando lo state richiamando. Può capitare che all'avvio di uno script da riga di comando si forniscano opzioni aggiuntive, come ad esempio:
python nome_script.py yes -b
Con buona probabilità, quello script sta utilizzando il modulo sys. Il primo parametro della lista argv (il valore ad indice 0) è sempre il nome dello script. Il resto dei valori è ordinato secondo l'ordine in cui sono stati passati. Facciamo una prova:
import sys
print(sys.argv)
Ora salviamo il file e richiamiamolo da riga di comando:
>>> python lezione_26.py primo_parametro secondo_parametro 3
# output
['lezione_26.py', 'primo_parametro', 'secondo_parametro', '3']
Una volta capito questo concetto, possiamo fare qualcosa come:
import sys
nome_script, primo, secondo = sys.argv
print(f"""
Il nome dello script è: {nome_script}
Il primo parametro passato è: {primo}
Il secondo parametro passato è: {secondo}""")
E ottenere quindi:
>>> python lezione_26.py alfa bravo
# output
Il nome dello script è: lezione_26.py
Il primo parametro passato è: alfa
Il secondo parametro passato è: bravo
Di norma è bene controllare che allo script siano stati passati abbastanza parametri prima di assegnarli ad eventuali variabili, quindi tenendo a mente che il primo parametro è sempre il nome dello script possiamo fare:
if len(sys.argv) < 3:
print("Devi passare due parametri allo script!")
print("Sto uscendo...")
sys.exit()
Una volta che avete i parametri potete farci tutto quello che vi pare. Ad esempio:
if primo == "info":
print("Questa è la lezione 26, dedicata a SYS.ARGV")
Oppure:
# nel file lezione_26.py
def sommatoria(a,b):
somma = int(a) + int(b)
print(f"La somma dei due valori è: {somma}")
sommatoria(primo,secondo)
# richiamiamo il file lezione_26.py
>>> python lezione_26.py 12 24
# output
La somma dei due valori è: 36