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