简体   繁体   English

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

[英]How to use `--foo 1 --foo 2` style arguments with Python argparse?

nargs='+' doesn't work the way I expected: 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'])

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. 我可以通过使用--name foo bar来“修复”这个,但这与我使用的其他工具不同,我宁愿更明确。 Does argparse support this? argparse支持这个吗?

You want to use action='append' instead of nargs='+' : 你想使用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 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. 如果您只想获取一系列位置参数,则使用nargs ,而如果您希望能够多次获取一个标志并将结果累积到列表中,则action='append'有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM