nargs='+'
doesn't work the way I expected:
>>> 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'])
I can "fix" this by using --name foo bar
, but that's unlike other tools I've used, and I'd rather be more explicit. Does argparse
support this?
You want to use action='append'
instead of 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
is used if you just want to take a series of positional arguments, while action='append'
works if you want to be able to take a flag more than once and accumulate the results in a list.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.