繁体   English   中英

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

[英]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=2narg='*'可以解决问题。 +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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM