[英]How to conditionally make python's argparse module require additional arguments
[英]How can I collect two options each with multiple arguments in Python's argparse module?
我想解析两个长的命令行选项-文件列表和类似的命令:
python example.py file1 file2 -- echo hello world
结果:
>>> args.filenames
["file1", "file2"]
>>> args.command
["echo", "hello", "world"]
在argparse或任何其他python CLI库(例如docopt)中可能吗?
在argparse中, --
表示将后面的所有内容都视为位置字符串。 但是示例中的所有字符串看起来都是这样,所以--
什么也没做。 因此剩下的问题是,argparse应该如何将5个字符串分配给2个参数。 如果您始终需要2个“文件”,则nargs=2
和narg='*'
可以解决问题。 +
和REMAINDER
( ...
)也适用于第二个。
*
后面紧跟*
是行不通的。 这类似于'(a*)(a*)'
的RegEx模式。 实际上,argparse使用RegEx模式匹配将字符串分配给位置参数。 创建2个参数并尝试各种nargs
值可能是nargs
。
另一种选择是将--
替换为可选参数,例如-c
使用nargs='*'
。
>>> 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')
,它将在解析输入时为您创建文件对象
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.