2015-06-11 13 views
6

nargs='+' non funziona come mi aspettavo:Come usare gli argomenti `--foo 1 --foo 2` con Python argparse?

>>> import argparse 
>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument("--name", dest='names', nargs='+') 
_StoreAction(option_strings=['--name'], dest='names', nargs='+', const=None, default=None, type=None, choices=None, help=None, metavar=None) 
>>> parser.parse_args('--name foo --name bar'.split()) 
Namespace(names=['bar']) 

posso "risolvere" questo utilizzando --name foo bar, ma questo è a differenza di altri strumenti che ho usato, e preferirei essere più esplicito. argparse supporta questo?

risposta

7

si desidera utilizzare action='append' invece di nargs='+':

>>> parser.add_argument("--name", dest='names', action='append') 
_AppendAction(option_strings=['--name'], dest='names', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None) 
>>> parser.parse_args('--name foo --name bar'.split()) 
Namespace(names=['foo', 'bar']) 

nargs viene utilizzato se si desidera solo per prendere una serie di argomenti posizionali, mentre action='append' opere se si vuole essere in grado di prendere una bandiera più di una volta e accumula i risultati in una lista.

Problemi correlati