我想解析两个长命令行选项 - 文件列表和如下命令:
python example.py file1 file2 -- echo hello world
结果:
>>> args.filenames
["file1", "file2"]
>>> args.command
["echo", "hello", "world"]
这是否可以在argparse或任何其他python CLI库(例如docopt)中使用?
答案 0 :(得分:1)
在argparse中,--
表示将后面的所有内容视为位置字符串。但是样本中的所有字符串都是这样的,因此--
什么都不做。所以剩下的问题是,argparse如何将5个字符串分配给2个参数。如果您总是想要2个'文件',那么nargs=2
和narg='*'
就能解决问题。 +
和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')
,它会在解析输入时为你创建文件对象