我有一些命令行参数分组如下:
cmdParser = argparse.ArgumentParser()
cmdParser.add_argument('mainArg')
groupOne = cmdParser.add_argument_group('group one')
groupOne.add_argument('-optA')
groupOne.add_argument('-optB')
groupTwo = cmdParser.add_argument_group('group two')
groupTwo.add_argument('-optC')
groupTwo.add_argument('-optD')
如何解析上面的内容,从而得到三个不同的名称空间对象?在
^{pr2}$谢谢你!在
argparse
中的任何内容都不能做到这一点。在不管怎样,
parser
从两个参数组开始,一个显示为positionals
,另一个显示为optionals
(我忘记了确切的标题)。所以在你的例子中,实际上有4个组。在解析器仅在格式化帮助时使用参数组。对于解析,所有参数都放在主
parser._actions
列表中。在解析过程中,解析器只传递一个命名空间对象。在您可以使用不同的参数集定义单独的解析器,并用
parse_known_args
调用每个解析器。与optionals
(标记的)参数一起使用比使用positionals
更好。你的帮助也就支离破碎了。在我在其他的SO问题中探讨了一个新颖的
Namespace
类,它可以基于某种虚线dest
(名称如group1.optA
,group2.optC
,等等)嵌套值。我不记得是否必须定制Action
类。在基本点是,当将值保存到名称空间时,解析器或实际上是
Action
(argument)对象会:这(和getattr/hasattr)就是解析器对
namespace
的全部期望。默认的Namespace
类很简单,只不过是一个普通的object
子类。但它可能会更精细。在很久以来,我一直在寻找解决方案 我想我终于拿到了。
所以我就把它放在这里。。。在
结果:
^{pr2}$显示帮助:
带调试标志:
带标志1和2:
使用标志1和2以及调试:
使用此方法唯一不能做的是将debug short标志传递给其他短标志:
你可以这样做:
这将为您提供普通的arg,以及包含每个添加组的名称空间的dictionary arg_组。在
(改编自this answer)
相关问题 更多 >
编程相关推荐