【问题标题】:How to use `--foo 1 --foo 2` style arguments with Python argparse?如何在 Python argparse 中使用`--foo 1 --foo 2` 样式参数?
【发布时间】:2015-08-27 03:33:01
【问题描述】:

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'])

我可以通过使用--name foo bar 来“修复”这个问题,但这与我使用过的其他工具不同,我宁愿更加明确。 argparse 支持吗?

【问题讨论】:

    标签: python arguments argparse


    【解决方案1】:

    您想使用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' 则适用于您希望能够多次获取一个标志并将结果累积到一个列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多