如何将 `--foo 1 --foo 2` 样式参数与 Python argparse 一起使用?

How to use `--foo 1 --foo 2` style arguments with Python 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'])

我可以 "fix" 通过使用 --name foo bar,但这与我使用的其他工具不同,我宁愿更明确。 argparse 支持吗?

您想使用 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'])

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