【发布时间】:2021-09-16 18:14:51
【问题描述】:
我希望argparse 生成的--help 包含所有子命令的帮助。
如何做到这一点?
【问题讨论】:
我希望argparse 生成的--help 包含所有子命令的帮助。
如何做到这一点?
【问题讨论】:
我已经成功地完成了这项工作,虽然它不是很优雅。
parser = argparse.ArgumentParser(add_help=False)
print_help_fn = parser.print_help
sub_parsers = [
# define sub-parsers here.
]
def print_help_wrapper():
print_help_fn()
for s in sub_parsers:
print("Subcommand:")
s.print_help()
parser.print_help = print_help_wrapper
parser.add_argument('-h', '--help', action='help')
有没有更好的方法来处理这个问题?
【讨论】:
print_help 使用 format_help 如果你想在打印之前收集和加入字符串。
parser.add_argument('-h', '--help', action='help')之前完成它才会起作用。
_HelpAction 类 __call__ 有一个 parser.print_help() 调用。因此,如果您希望它使用新版本,则必须在之后对其进行初始化。另一种方法是定义您自己的help action 子类。无论如何,子解析器机制相对“浅”,几乎完全在_SubParsersAction 类中实现。除此之外,主解析器对子解析器几乎一无所知。