如何在Python的argparse模块中收集两个带有多个参数的选项?

时间:2013-09-21 12:32:29

标签: python python-2.7 argparse docopt

我想解析两个长命令行选项 - 文件列表和如下命令:

python example.py file1 file2 -- echo hello world

结果:

>>> args.filenames
["file1", "file2"]
>>> args.command
["echo", "hello", "world"]

这是否可以在argparse或任何其他python CLI库(例如docopt)中使用?

2 个答案:

答案 0 :(得分:1)

在argparse中,--表示将后面的所有内容视为位置字符串。但是样本中的所有字符串都是这样的,因此--什么都不做。所以剩下的问题是,argparse如何将5个字符串分配给2个参数。如果您总是想要2个'文件',那么nargs=2narg='*'就能解决问题。 +REMAINDER...)也适用于第二个。

*后跟*,不起作用。这类似于'(a*)(a*)'的RegEx模式。事实上,argparse使用RegEx模式匹配将字符串分配给位置参数。创建2个参数,并尝试各种nargs值可能是有益的。

另一种选择是将--替换为选项参数,例如-c nargs='*'。{/ p>

答案 1 :(得分:1)

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.parse_args('--foo x y --bar 1 2'.split())
Namespace(bar=['1', '2'], foo=['x', 'y'])

同样对于你的files参数,你也可以使用type=argparse.FileType('w')type=argparse.FileType('r'),它会在解析输入时为你创建文件对象