Se hai sviluppato uno script o un'applicazione Python pensata per essere eseguita principalmente in emulatori di terminale o persino app GUI, l'aggiunta di argomenti della riga di comando può migliorarne l'usabilità, la leggibilità del codice, la struttura dell'applicazione e la facilità d'uso complessiva dell'applicazione per gli utenti finali. Questi argomenti della riga di comando sono anche chiamati opzioni o opzioni e funzionano in modo simile agli argomenti che di solito si vedono negli script bash e in altri programmi basati su C/C++.
Per aggiungere argomenti agli script Python, dovrai usare un modulo integrato chiamato argparse. Come suggerisce il nome, analizza gli argomenti della riga di comando utilizzati durante l'avvio di uno script o di un'applicazione Python. Questi argomenti analizzati vengono anche controllati dal modulo argparse per assicurarsi che siano del tipo corretto. Vengono generati errori se sono presenti valori non validi negli argomenti.
L'utilizzo del modulo argparse può essere compreso meglio attraverso esempi. Di seguito sono riportati alcuni esempi di codice che ti consentiranno di iniziare con il modulo argparse.
Esempio 1: generare un argomento e un messaggio di aiuto
Considera il seguente esempio di codice:
importareargparse
analizzatore =argparse.ArgomentoParser(descrizione='Un programma di prova.')
argomenti= analizzatore.parse_args()
La prima istruzione importa il modulo argparse. Successivamente, viene creata una nuova istanza dell'oggetto ArgumentParser e viene fornita una breve descrizione del programma come argomento. L'oggetto ArgumentParser è necessario per convertire i valori degli argomenti della riga di comando in tipi di dati compresi da Python. Questo viene fatto dal metodo parse_args dell'oggetto ArgumentParser, come mostrato nell'ultima istruzione.
Supponendo che tu abbia salvato l'esempio di codice sopra indicato in un file chiamato test.py, l'esecuzione dei comandi seguenti ti fornirà messaggi di aiuto relativi al programma.
$ ./test.pi-h$ ./test.pi-aiuto
Dovresti ottenere un output simile a questo:
utilizzo: test.py [-h]
Un programma di prova
argomenti facoltativi:
-h, --help mostra questo messaggio di aiuto ed esce
Si noti che nessuna logica per gestire gli argomenti analizzati e convertirli in oggetti è stata aggiunta all'esempio di codice menzionato sopra. Pertanto, i messaggi di aiuto per i singoli argomenti non vengono visualizzati nell'output. Una volta aggiunta la logica per la gestione dei valori degli argomenti analizzati nel programma, i messaggi di aiuto inizieranno a mostrare la descrizione per i singoli argomenti.
Esempio 2: gestire un argomento stringa
Per aggiungere argomenti accettabili dal tuo script Python, devi usare il metodo add_argument. Dai un'occhiata al seguente codice:
importareargparseanalizzatore =argparse.ArgomentoParser(descrizione='Un programma di prova.')
analizzatore.add_argument('stringa_stampa', aiuto='Stampa l'argomento fornito.')
argomenti= analizzatore.parse_args()
Stampa(argomentiprint_string)
È stata aggiunta una nuova istruzione che mostra l'uso del metodo add_argument. Qualsiasi argomento aggiunto all'avvio dello script verrà trattato come un oggetto print_string da ArgumentParser.
Nota che per impostazione predefinita, il metodo add_argument tratta i valori recuperati dagli argomenti come stringhe, quindi non devi specificare esplicitamente il tipo in questo caso. Un valore predefinito Nessuno viene assegnato anche agli argomenti aggiunti, a meno che non vengano sovrascritti.
Ancora una volta dai un'occhiata al messaggio di aiuto:
utilizzo: test.py [-h] [print_string]Un programma di prova
argomenti posizionali:
print_string Stampa l'argomento fornito.
argomenti facoltativi:
-h, --help mostra questo messaggio di aiuto ed esce
Una delle righe in output dice argomenti posizionali. Poiché non è definita alcuna parola chiave per l'argomento, attualmente l'argomento viene trattato come un argomento posizionale in cui l'ordine e la posizione dell'argomento fornito ha effetto diretto sul programma. Anche gli argomenti posizionali sono obbligatori, a meno che non ne modifichi manualmente il comportamento.
Per definire e analizzare argomenti facoltativi, è possibile utilizzare – (doppio trattino) e modificare i loro valori predefiniti utilizzando l'argomento predefinito.
importareargparseanalizzatore =argparse.ArgomentoParser(descrizione='Un programma di prova.')
analizzatore.add_argument('--print_string', aiuto='Stampa l'argomento fornito.',predefinito=Aa caso corda.)
argomenti= analizzatore.parse_args()
Stampa(argomentiprint_string)
Ora, quando esegui lo script test.py senza alcun argomento, dovresti ottenere una stringa casuale. come uscita. Puoi anche usare facoltativamente la parola chiave –print_string per stampare qualsiasi stringa di tua scelta.
$ ./test.pi--print_string LinuxHint.insieme aLinuxHint.comSi noti che è possibile rendere obbligatorio un argomento facoltativo utilizzando un argomento aggiuntivo require=True.
Infine, puoi anche definire versioni abbreviate dell'argomento usando - (trattino singolo) per ridurre la verbosità.
importareargparseanalizzatore =argparse.ArgomentoParser(descrizione='Un programma di prova.')
analizzatore.add_argument(-P, '--print_string', aiuto='Stampa l'argomento fornito.',predefinito=Aa caso corda.)
argomenti= analizzatore.parse_args()
Stampa(argomentiprint_string)
L'esecuzione del seguente comando dovrebbe darti lo stesso risultato di cui sopra:
$ ./test.pi-p LinuxHint.insieme aEsempio 3: gestire un argomento intero
Per gestire gli argomenti che richiedono valori interi, è necessario impostare la parola chiave type su int per consentire la convalida e generare errori nel caso in cui la condizione non venga soddisfatta.
importareargparseanalizzatore =argparse.ArgomentoParser(descrizione='Un programma di prova.')
analizzatore.add_argument('-P', '--print_string', aiuto='Stampa l'argomento fornito.', genere=int)
argomenti= analizzatore.parse_args()
Stampa(argomentiprint_string)
Prova a eseguire il seguente comando:
$ ./test.pi-p LinuxHint.insieme aDovresti ricevere un errore come questo:
utilizzo: test.py [-h] [-p STAMPA_STRING]test.py: errore: argomento -p/--print_string: valore int non valido: 'LinuxHint.com'
Fornire un valore intero ti darà il risultato corretto:
$ ./test.pi-P10001000Esempio 4: gestire i toggle True e False
Puoi passare argomenti senza alcun valore per trattarli come flag True e False usando l'argomento action.
importareargparseanalizzatore =argparse.ArgomentoParser(descrizione='Un programma di prova.')
analizzatore.add_argument('-P', '--print_string', aiuto='Stampa l'argomento fornito.',azione='store_vero')
argomenti= analizzatore.parse_args()
Stampa(argomentiprint_string)
Esegui il comando seguente per ottenere un semplice True come output:
$ ./test.pi-PSe esegui lo script senza l'argomento -p, verrà assegnato un valore False. Il valore store_true della parola chiave action assegna un valore True alla variabile print_string ogni volta che viene specificato esplicitamente l'argomento -p, altrimenti viene assegnato False alla variabile.
Esempio 5: tratta i valori degli argomenti come elenco
Se vuoi ottenere più valori contemporaneamente e memorizzarli nell'elenco, devi fornire la parola chiave nargs nel seguente formato:
importareargparseanalizzatore =argparse.ArgomentoParser(descrizione='Un programma di prova.')
analizzatore.add_argument('-P', '--print_string', aiuto='Stampa l'argomento fornito.',narghilè='*')
argomenti= analizzatore.parse_args()
Stampa(argomentiprint_string)
Esegui il seguente comando per testare il codice sopra:
$ ./test.pi-p a bDovresti ottenere un output come questo:
['a', 'b']Conclusione
Il modulo argparse è abbastanza completo con tonnellate di opzioni per modificare il comportamento delle applicazioni della riga di comando e analizzare i valori forniti dall'utente. Questi esempi riguardano solo l'utilizzo di base del modulo argparse. Per applicazioni avanzate e complesse, potrebbero essere necessarie diverse implementazioni. Visitare il documentazione ufficiale per una spiegazione completa del modulo.