嵌套的ArgumentParser

时间:2014-04-20 03:26:14

标签: python command-line argparse

我正在尝试为命令行工具构建嵌套解析器。我目前正在使用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的麻烦?谢谢!

1 个答案:

答案 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()