【问题标题】:How to include all sub-commands help message in argparse's help messages?如何在 argparse 帮助消息中包含所有子命令帮助消息?
【发布时间】:2021-09-16 18:14:51
【问题描述】:

我希望argparse 生成的--help 包含所有子命令的帮助。

如何做到这一点?

【问题讨论】:

    标签: python argparse


    【解决方案1】:

    我已经成功地完成了这项工作,虽然它不是很优雅。

    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 如果你想在打印之前收集和加入字符串。
    • 重写 print_help 函数感觉很脆弱,只有在parser.add_argument('-h', '--help', action='help')之前完成它才会起作用。
    • _HelpAction__call__ 有一个 parser.print_help() 调用。因此,如果您希望它使用新版本,则必须在之后对其进行初始化。另一种方法是定义您自己的help action 子类。无论如何,子解析器机制相对“浅”,几乎完全在_SubParsersAction 类中实现。除此之外,主解析器对子解析器几乎一无所知。
    • 当我看到这样的讨论时,重点是为文档目的制作复合帮助,而不是替换默认帮助。
    猜你喜欢
    • 2016-06-21
    • 2012-08-17
    • 2014-10-07
    • 2015-07-26
    • 2020-11-14
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多