如何在Python argparse中使用`--foo 1 --foo 2`样式参数?

l0b*_*0b0 6 python arguments argparse

nargs='+' 不按我预期的方式工作:

>>> 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'])
Run Code Online (Sandbox Code Playgroud)

我可以通过使用来"修复"这个--name foo bar,但这与我使用的其他工具不同,我宁愿更明确.是否argparse支持呢?

Bri*_*ell 7

你想用action='append'而不是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'])
Run Code Online (Sandbox Code Playgroud)

nargs如果您只想获取一系列位置参数,则action='append'使用它,如果您希望能够多次获取一个标志并将结果累积到列表中,则可以使用.