Python argparse选项子parser

Python argparse选项子parser,python,argparse,Python,Argparse,我一直在试图找到一种方法让argparse使用嵌套的可选子parser 我希望看到的一个基本示例是有一个“第一”子parser search,它对我拥有的一些数据执行搜索。这有一些我们可以搜索的可选内容(例如,all、group、type、tags等)。例如: $ python test.py search --type <type> --group <group> $python test.py搜索--类型--组 然后,我希望有可选的子parser与这些搜索结果交互

我一直在试图找到一种方法让argparse使用嵌套的可选子parser

我希望看到的一个基本示例是有一个“第一”子parser search,它对我拥有的一些数据执行搜索。这有一些我们可以搜索的可选内容(例如,all、group、type、tags等)。例如:

$ python test.py search --type <type> --group <group>
$python test.py搜索--类型--组
然后,我希望有可选的子parser与这些搜索结果交互,例如更新或删除条目。例如:

$ python test.py search --type <type> --group <group> update --tags <new_tags>
$python test.py搜索--类型--组更新--标记
我遇到的问题是,当我将“更新”解析器作为“搜索”子解析器的子解析器时,如果我运行第一个示例,我会得到错误:

$ python test.py search --type <type> --group <group>
test.py search: error: too few arguments
$python test.py搜索--类型--组
test.py搜索:错误:参数太少
为了解决这个问题,我听过nargs建议()但我不能让它使用--option的东西。也许我遗漏了什么?我还研究了Bug9253(),特别是“GitRemote”部分,但我没有看到解决方案

在argparse中实现此功能有什么建议吗?如果需要的话,我可以使用我自己的arguement解析器,但是如果我可以使用argparse,那就更好了


谢谢。

如果我没看错的话,这真的不是关于嵌套子parser,而是关于使子parser成为可选的

次parser参数是接受选择的位置参数。实际上,这是必要的。选项采用“必需”参数,但位置不采用

但是正如Bug9253中所讨论的,在开发版本中,子parser已经成为可选的(不是必需的)。这是因为argparse测试缺少参数的方式发生了变化。我提出了一个补丁,使子parser在默认情况下成为必需的,但也让用户可以选择不需要它

不幸的是,这涉及到调整argparse内部


去掉嵌套的子parser,使用
parse\u known\u args
,怎么样?如果我的猜测是正确的,可选的嵌套子parser命令(及其参数)将在“rest”中返回,然后您可以使用新的解析器处理它。

如果我理解正确,这实际上不是关于嵌套子parser,而是关于使子parser成为可选的

次parser参数是接受选择的位置参数。实际上,这是必要的。选项采用“必需”参数,但位置不采用

但是正如Bug9253中所讨论的,在开发版本中,子parser已经成为可选的(不是必需的)。这是因为argparse测试缺少参数的方式发生了变化。我提出了一个补丁,使子parser在默认情况下成为必需的,但也让用户可以选择不需要它

不幸的是,这涉及到调整argparse内部


去掉嵌套的子parser,使用
parse\u known\u args
,怎么样?如果我的猜测是正确的,可选的嵌套子parser命令(及其参数)将在“rest”中返回,然后您可以使用新的解析器处理该命令。

我猜您只需要定义第一个解析器,解析argv(搜索选项[N]),然后获取剩余的argv([N])我想您只需要定义第一个解析器,解析argv(search opts[N]),然后获取剩余的argv([N]),并将其传递给另一个解析器实例。