我正在尝试为命令行工具构建嵌套的解析器。我目前使用的是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的麻烦?谢谢
我想你的问题在这里得到了答案:
带有嵌套命名空间的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()