2015-06-11 7 views
6

nargs='+' nie działa tak, jak z oczekiwaniami:Jak używać argumentów stylu `--foo 1 - foo 2` z 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']) 

mogę „naprawić” to za pomocą --name foo bar, ale to w odróżnieniu od innych narzędzi użyłem, i wolałbym być bardziej wyraźne. Czy obsługuje to argparse?

Odpowiedz

7

Chcesz użyć action='append' zamiast 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 jest używany, jeśli po prostu chcesz podjąć szereg pozycyjnych argumentów, natomiast action='append' prace, jeśli chcesz być w stanie podjąć flagę ponad raz i zgromadzić wyniki na liście.

Powiązane problemy