嵌套参数解析器

1 投票
1 回答
533 浏览
提问于 2025-04-18 03:27

我正在尝试为一个命令行工具构建嵌套的解析器。目前我使用的是 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')})

这样的功能,或者说有没有什么原生的方法可以实现这样的功能,还是说我必须自己去构建一个自定义的参数解析器呢?谢谢!

1 个回答

3

我觉得你的问题在这里已经有答案了:

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

撰写回答