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