argparse subparser monolithic help output

后端 未结 5 554
予麋鹿
予麋鹿 2020-11-29 06:02

My argparse has only 3 flags (store_true) on the top level, everything else is handled through subparsers. When I run myprog.py --help, the output shows a list

5条回答
  •  醉话见心
    2020-11-29 06:17

    Perhaps an easier approach is to use parser.epilog:

    def define_parser():
        import argparse
        parser = argparse.ArgumentParser(
            prog='main',
            formatter_class=argparse.RawDescriptionHelpFormatter,
        )
        commands = parser.add_subparsers(
            title="required commands",
            help='Select one of:',
        )    
        command_list = commands.add_parser(
            'list',
            help='List included services',
        )
        command_ensure = commands.add_parser(
            'ensure',
            help='Provision included service',
        )
        command_ensure.add_argument(
            "service",
            help='Service name',
        )
        import textwrap
        parser.epilog = textwrap.dedent(
            f"""\
            commands usage:\n
            {command_list.format_usage()}
            {command_ensure.format_usage()}
            """
        )
        return parser
    
    parser = define_parser()
    
    parser.print_help()
    

    which results in the following output:

    usage: main [-h] {list,ensure} ...
    
    optional arguments:
      -h, --help     show this help message and exit
    
    required commands:
      {list,ensure}  Select one of:
        list         List included services
        ensure       Provision included service
    
    commands usage:
    
    usage: main list [-h]
    
    usage: main ensure [-h] service
    

提交回复
热议问题