Questo modulo consente agli script ad analizzare gli argomenti da riga
di comando in sys.argv
. Supporta le stesse convenzioni della
funzione Unix getopt() (inclusi i significati speciali
degli argomenti nella forma `-
' e `-
-
').
Le opzioni lunghe, analogamente a quelle supportate dai software GNU,
possono venire usate anche tramite un terzo argomento facoltativo.
Questo modulo fornisce una singola funzione ed una eccezione:
args, options[, long_options]) |
Note: Diversamente dal getopt() GNU, dopo un argomento non-opzione, anche i successivi argomenti vengono considerati come non-opzioni. Questo comportamento è simile al modo in cui operano i sistemi Unix non-GNU.
long_options, se specificato, deve essere una lista di stringhe
con i nomi delle opzioni lunghe che dovrebbero venire supportate. I
caratteri '-
-'
iniziali non dovrebbero venire inclusi
nel nome dell'opzione. Le opzioni lunghe che richiedono un argomento
dovrebbero essere seguite dal segno di uguale ("="). Per
accettare solo opzioni lunghe, options dovrebbe essere una
stringa vuota. Le opzioni lunghe da riga di comando possono venire
riconosciute come tali, purché contengano un prefisso del nome
dell'opzione che corrisponda esattamente con una delle opzioni
accettate. Per esempio, se long_options è ['foo', 'frob']
,
l'opzione --fo corrisponderà con --foo, ma
--f non verrà considerata una corrispondenza univoca,
così da sollevare un'eccezione GetoptError.
Il valore restituito consiste di due elementi: il primo è una lista di
coppie (option, value)
; il secondo è la lista degli
argomenti del programma rimasti a sinistra, dopo che la lista delle
opzioni è stata tolta (questa è la suddivisione in fette di args
(NdT: per mezzo di split())). Ogni coppia opzione-valore
restituita ha l'opzione come primo elemento, avente come prefisso un
trattino per le opzioni brevi (per es. '-x'
) o due trattini per
le opzioni lunghe (per es. '-
-long-option'
), e l'argomento
dell'opzione come suo secondo argomento, o una stringa vuota se
l'opzione non ha argomenti. Le opzioni compaiono nella lista
nello stesso ordine nel quale sono state individuate, permettendo così
occorrenze nultiple. Le opzioni lunghe e brevi si possono mescolare.
args, options[, long_options]) |
Se il primo carattere dell'opzione stringa è `+', o se la variabile d'ambiente POSIXLY_CORRECT è impostata, allora l'elaborazione delle opzioni si ferma non appena viene incontrato un argomento di non-opzione.
Modificato nella versione 1.6: Introdotto GetoptError come sinonimo di error.
Un esempio usando solamente lo stile delle opzioni Unix:
>>> import getopt >>> args = '-a -b -cfoo -d bar a1 a2'.split() >>> args ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] >>> optlist, args = getopt.getopt(args, 'abc:d:') >>> optlist [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')] >>> args ['a1', 'a2']
L'uso dei nomi lunghi delle opzioni è altrettanto facile:
>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' >>> args = s.split() >>> args ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] >>> optlist, args = getopt.getopt(args, 'x', [ ... 'condition=', 'output-file=', 'testing']) >>> optlist [('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')] >>> args ['a1', 'a2']
In uno script, l'uso tipico è qualcosa di simile a questo:
import getopt, sys def main(): try: opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) except getopt.GetoptError: # stampa l'informazione di aiuto ed esce: usage() sys.exit(2) output = None verbose = False for o, a in opts: if o == "-v": verbose = True if o in ("-h", "--help"): usage() sys.exit() if o in ("-o", "--output"): output = a # ... if __name__ == "__main__": main()
Vedete anche: