我正在尝试为命令行工具构建嵌套解析器。我目前正在使用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的麻烦?谢谢!
答案 0 :(得分:3)
我认为你的问题在这里得到了回答:
argparse subcommands with nested namespaces
我的一个答案使用自定义操作。
但是处理重复参数名称的一种更简单的方法是给一个或两个不同的“目标”。值。它区分了两者没有额外的机制。
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()