Python Argparse中nargs= >1的append作用是什么?

4

我正在尝试创建一个解析器,可以接受任意选择列表(要绘制的内容),并为每个选择指定可选参数。我放弃了使用子子解析器的想法,而是使用了多个以下形式的参数:

--plot foo --xlim 0 10 --ylim -5 5 --plot bar --xlim -5 5 --ylim 0 10 --clim 1e24 1e27

但是我似乎无法通过nargs=2使附加操作正常工作:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append', nargs=2, type=int)
_AppendAction(option_strings=['--foo'], dest='foo', nargs=2, const=None, default=None,  type=<type 'int'>, choices=None, help=None, metavar=None)
>>> parser.parse_args("--foo 1 2 --foo 3 4")
usage: [-h] [--foo FOO FOO]
: error: unrecognized arguments: - - f o o   1   2   - - f o o   3 4

我希望能够得到一个列表或元组的列表。这种行为是否被argparse支持或者我在实现时出了什么问题?请注意,不要删除html标签。

1
你有没有注意到在示例中是如何调用parse_args的?它们总是使用parse_args('--foo 1 2'.split())。请注意最后的.split(),它将一个字符串转换为字符串列表。 - Bakuriu
1个回答

5

您应该传递字符串列表,而不是单个字符串:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append', nargs=2, type=int)
_AppendAction(option_strings=['--foo'], dest='foo', nargs=2, const=None, default=None, type=<type 'int'>, choices=None, help=None, metavar=None)
>>> parser.parse_args(["--foo", "1", "2", "--foo", "3", "4"])  # <----
Namespace(foo=[[1, 2], [3, 4]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接