我正在构建一个 CLI,它利用子解析器来处理类似于 git 之类的工具的子命令。我的一些子命令共享通用选项,因此我有一个定义选项的组解析器,每个需要它们的子命令都parents=group_parser
用作参数之一。例如:
group_parser = argparse.ArgumentParser()
group_parser.add_argument('-f', '--foo', action='store_true')
command1_parser = subparsers.add_parser('command1', parents=[group_parser])
command2_parser = subparsers.add_parser('command2', parents=[group_parser])
如您所见, command1 和 command2 都继承了 option --foo
。我要做的是分别在 command1 和 command2 上更新 foo 的帮助文本。例如,如果我跑步myprog command1 -h
,我希望它--foo
在我跑步时说出不同的帮助信息myprog command2 -h
。问题是直到我这样做之前parse_args()
没有为该参数更新的命名空间,所以这样的事情不起作用:
group_parser = argparse.ArgumentParser()
group_parser.add_argument('-f', '--foo', action='store_true')
command1_parser = subparsers.add_parser('command1', parents=[group_parser])
command1.foo['help'] = "foo help for command1"
command2_parser = subparsers.add_parser('command2', parents=[group_parser])
command2.foo['help'] = "foo help for command2"
这是否可以以某种方式向函数外部的参数添加额外的参数add_argument()
?唯一的其他解决方案是不使用继承的父级,只为每个子命令单独定义 foo ,但如果有更新参数的方法,那将是理想的。