Python 3 - Argomenti della riga di comando
Python fornisce un file getopt modulo che ti aiuta ad analizzare le opzioni e gli argomenti della riga di comando.
$ python test.py arg1 arg2 arg3
Il pitone sys Il modulo fornisce l'accesso a qualsiasi argomento della riga di comando tramite sys.argv. Questo ha due scopi:
sys.argv è l'elenco degli argomenti della riga di comando.
len(sys.argv) è il numero di argomenti della riga di comando.
Qui sys.argv [0] è il programma ie. il nome dello script.
Esempio
Considera il seguente script test.py -
#!/usr/bin/python3
import sys
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
Ora esegui lo script sopra come segue:
$ python test.py arg1 arg2 arg3
Questo produce il seguente risultato:
Number of arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']
NOTE - Come accennato in precedenza, il primo argomento è sempre il nome dello script e viene anche conteggiato in numero di argomenti.
Analisi degli argomenti della riga di comando
Python ha fornito un file getoptmodulo che ti aiuta ad analizzare le opzioni e gli argomenti della riga di comando. Questo modulo fornisce due funzioni e un'eccezione per abilitare l'analisi degli argomenti della riga di comando.
getopt.getopt metodo
Questo metodo analizza le opzioni della riga di comando e l'elenco dei parametri. Di seguito è riportata una semplice sintassi per questo metodo:
getopt.getopt(args, options, [long_options])
Ecco il dettaglio dei parametri -
args - Questa è la lista degli argomenti da analizzare.
options - Questa è la stringa di lettere delle opzioni che lo script vuole riconoscere, con le opzioni che richiedono un argomento dovrebbero essere seguite da due punti (:).
long_options- Questo è un parametro opzionale e, se specificato, deve essere un elenco di stringhe con i nomi delle opzioni lunghe, che dovrebbero essere supportate. Le opzioni lunghe, che richiedono un argomento, devono essere seguite da un segno di uguale ('='). Per accettare solo opzioni lunghe, le opzioni dovrebbero essere una stringa vuota.
Questo metodo restituisce un valore costituito da due elementi: il primo è un elenco di (option, value) coppie, il secondo è un elenco di argomenti del programma rimasti dopo che l'elenco delle opzioni è stato rimosso.
Ogni coppia opzione-valore restituita ha l'opzione come primo elemento, preceduta da un trattino per le opzioni brevi (ad esempio, '-x') o da due trattini per le opzioni lunghe (ad esempio, '--long-option').
Eccezione getopt.GetoptError
Viene sollevato quando un'opzione non riconosciuta viene trovata nell'elenco degli argomenti o quando un'opzione che richiede un argomento non viene fornita.
L'argomento dell'eccezione è una stringa che indica la causa dell'errore. Gli attributimsg e opt fornire il messaggio di errore e la relativa opzione.
Esempio
Supponiamo di voler passare due nomi di file tramite la riga di comando e di voler anche dare un'opzione per controllare l'utilizzo dello script. L'utilizzo dello script è il seguente:
usage: test.py -i <inputfile> -o <outputfile>
Ecco il seguente script per test.py -
#!/usr/bin/python3
import sys, getopt
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print ('test.py -i <inputfile> -o <outputfile>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print ('test.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print ('Input file is "', inputfile)
print ('Output file is "', outputfile)
if __name__ == "__main__":
main(sys.argv[1:])
Produzione
Ora, esegui lo script sopra come segue:
$ test.py -h
usage: test.py -i <inputfile> -o <outputfile>
$ test.py -i BMP -o
usage: test.py -i <inputfile> -o <outputfile>
$ test.py -i inputfile -o outputfile
Input file is " inputfile
Output file is " outputfile