2013-06-15 33 views
13

Quando si esegue parsePlotSens.py -s bw hehe, si dice che hehe è un argomento non riconosciuto. Tuttavia, se eseguo parsePlotSens.py hehe -s bw, è OK. Idealmente, mi piacerebbe che funzionasse per entrambi i casi.python argparse: argomenti non riconosciuti

Qualche consiglio? Quello che segue è il mio codice:

if __name__ == '__main__' : 

    parser = argparse.ArgumentParser(prog='parsePlotSens'); 
    parser.add_argument('-s', '--sort', nargs =1, action = 'store', choices = ['mcs', 'bw'], default='mcs', help=sorthelp) 
    parser.add_argument('filename', nargs ='+', action = 'store') 
    option = parser.parse_args(sys.argv) 

risposta

28

Non passare sys.argv come argomento a parse_args. Basta usare

option = parser.parse_args() 

Se passate sys.argv-parse_args, quindi il percorso o il nome dello script stesso è il primo elemento in sys.argv e diventa così il valore di option.filename. Il hehe diventa quindi un argomento sconosciuto.

Se si omette sys.argv quindi parse_args analizza sys.argv come previsto.

+6

In alternativa è possibile chiamare parser.parse_args (sys.argv [1:]). Internamente argparse fa proprio questo. – MarioVilas

4

Inoltre, come complemento alla risposta di unutbu, memorizzare gli argomenti in un dizionario questo modo rende i test facile:

args = vars(parser.parse_args()) 
print args 

stampa il dizionario:

{'sort': ['bw'], 'filename': ['hehe']} 

come:

if args['sort'] == 'bw': 
    # code here 

... 
0

È possibile aggirare il problema, consentendo argomenti sconosciuti

Sostituire

args = parser.parse_args() 

con

args, unknown = parser.parse_known_args() 
Problemi correlati