Argparse Ordine errato di parametri posizionali e opzionali
-
27-10-2019 - |
Domanda
Perché Argparse non analizziamo questi argomenti?
--foo 1 2 3 bar
Usando
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='+')
parser.add_argument('bar')
che fornisce il seguente errore:
Errore: troppo pochi argomenti
Se approvo prima l'argomento del bar, funziona:
bar --foo 1 2 3
Ora, questo in sé non è poi così male. Posso vivere con gli argomenti di posizione prima è solo che questo comportamento è incompatibile con l'aiuto che ArgParse crea per noi, che afferma che la barra dovrebbe essere l'ultima:
Utilizzo: ArgParetest.py [-H] [--foo foo [foo ...]] bar
Quindi, come fai a far funzionare questo testo con un aiuto coerente?
Ecco un completo Programma di prova.
Soluzione
Forse provare a fare -Input -Output Flags e impostazione di queste opzioni su richiesto = true nel add_argument?
http://docs.python.org/dev/library/argparse.html#the-add-argument-method
Altri suggerimenti
nargs='+'
dice ad Argparse di raccogliere insieme tutti gli argomini rimanenti, quindi bar
è incluso. Non ha un modo magico per indovinare bar
essere un argomento significativo da solo e non parte degli args presi --foo
.
L'esempio nei documenti si riferisce a un semplice --foo
argomento, non uno con nargs='+'
. Assicurati di capire la differenza.