嵌套ArgumentParser(Nested ArgumentParser)

2019-10-19 22:37发布

我想建立一个命令行工具嵌套解析器。 我目前使用add_subparsers ,但似乎对于一个特定的情况下,没有足够强大。 我不能同一命名参数添加到这两个父解析器和子分析器的命令。 请看下面的例子:

import argparse

argparser = argparse.ArgumentParser()
argparser.add_argument("-H", action="store_true")
subparser = argparser.add_subparsers(dest='sp')
cmd = subparser.add_parser("cmd")
cmd.add_argument("-H")

print argparser.parse_args()

然后,运行

py test.py -H cmd -H 5

在命令行上给出

Namespace(H='5', sp='cmd')

我希望,而不是有东西也许像

Namespace(H=True, sp={'cmd':Namespace(h='5')})

有没有得到这样的功能,原生的方式,或者说我必须去通过建立一个自定义argparser的麻烦? 谢谢!

Answer 1:

我觉得你的问题是在这里得到解答:

argparse子命令与嵌套的命名空间

我的一个答案,使用自定义操作。

但处理重复参数名称的简单的方法,就是给一个或两个不同的“DEST”值。 这两者之间的区别,无需额外的机械。

argparser = argparse.ArgumentParser()
argparser.add_argument("-H", action="store_true")
subparser = argparser.add_subparsers(dest='sp')
cmd = subparser.add_parser("cmd")
cmd.add_argument("-H", dest='cmd_H')

print argparser.parse_args()


文章来源: Nested ArgumentParser