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



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

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 个参数。 nargs=2 ,如果您总是想要 2 个"文件",narg='*'就可以了。 +REMAINDER...)也将为第二种工作。

不起作用的是*后跟*. 这将类似于'(a*)(a*)'的正则表达式模式。 事实上,argparse 使用 RegEx 模式匹配将字符串分配给位置参数。 创建 2 个参数并尝试各种 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'])

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

相关内容

  • 没有找到相关文章

最新更新