【发布时间】:2018-01-30 02:13:14
【问题描述】:
我正在构建一个 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 都继承了选项--foo。我要做的是分别在 command1 和 command2 上更新 foo 的帮助文本。例如,如果我运行myprog command1 -h,我希望它在运行myprog command2 -h 时为--foo 提供不同的帮助信息。问题是直到我执行 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,但如果有更新参数的方法,那将是理想的。
【问题讨论】:
标签: python argparse subparsers