如何调整argparse帮助界面中父选项及各选项的显示顺序?
问题描述
我编写了如下Python 3代码:
main_parser = argparse.ArgumentParser(prog='my-prog') common_optional_parser = argparse.ArgumentParser(add_help=False) common_optional_parser.add_argument('--foo', help='help for --foo') common_optional_parser.add_argument('--bar', help='help for --bar') subparsers = main_parser.add_subparsers(dest='subcmd', required=True) my_sub_parser1 = subparsers.add_parser('abc', help='help for abc', parents=[common_optional_parser]) my_sub_parser1.add_argument('--suboption', help='help for suboption', action='store_true') my_sub_parser1.set_defaults(func=some_func) args = main_parser.parse_args()
运行后,帮助界面显示如下:
$ ./my-prog.py abc -h usage: my-prog abc [-h] [--foo FOO] [--bar BAR] [--suboption] options: -h, --help show this help message and exit --foo FOO help for --foo --bar BAR help for --bar --suboption help for suboption
请问能否将--suboption显示在通用选项(--foo和--bar)上方,同时将--help选项显示在最后?
解决方案
可以通过调整参数添加逻辑、手动控制help位置来实现需求,以下是两种可行方法:
方法1:调整参数顺序+手动添加help
argparse默认按参数添加顺序展示选项,但-h/--help是自动默认添加的,所以需要先关闭子解析器的自动help功能,之后按需求顺序添加参数,最后手动加入help选项:
main_parser = argparse.ArgumentParser(prog='my-prog') common_optional_parser = argparse.ArgumentParser(add_help=False) common_optional_parser.add_argument('--foo', help='help for --foo') common_optional_parser.add_argument('--bar', help='help for --bar') subparsers = main_parser.add_subparsers(dest='subcmd', required=True) # 创建子解析器时关闭自动添加help my_sub_parser1 = subparsers.add_parser('abc', help='help for abc', parents=[common_optional_parser], add_help=False) # 先添加子命令专属选项 my_sub_parser1.add_argument('--suboption', help='help for suboption', action='store_true') # 最后手动添加help选项 my_sub_parser1.add_argument('-h', '--help', action='help', help='show this help message and exit') my_sub_parser1.set_defaults(func=some_func) args = main_parser.parse_args()
运行后帮助输出会变成:
$ ./my-prog.py abc -h usage: my-prog abc [--suboption] [--foo FOO] [--bar BAR] [-h] options: --suboption help for suboption --foo FOO help for --foo --bar BAR help for --bar -h, --help show this help message and exit
方法2:自定义选项分组(更清晰区分)
如果需要明确区分不同类型的选项,可以自定义参数分组,按顺序添加专属组、通用组、帮助组,让输出结构更直观:
import argparse main_parser = argparse.ArgumentParser(prog='my-prog') common_optional_parser = argparse.ArgumentParser(add_help=False) # 给通用选项创建分组 common_group = common_optional_parser.add_argument_group('通用选项') common_group.add_argument('--foo', help='help for --foo') common_group.add_argument('--bar', help='help for --bar') subparsers = main_parser.add_subparsers(dest='subcmd', required=True) my_sub_parser1 = subparsers.add_parser('abc', help='help for abc', parents=[common_optional_parser], add_help=False) # 先添加子命令专属分组 sub_group = my_sub_parser1.add_argument_group('子命令专属选项') sub_group.add_argument('--suboption', help='help for suboption', action='store_true') # 最后添加帮助选项分组 help_group = my_sub_parser1.add_argument_group('帮助选项') help_group.add_argument('-h', '--help', action='help', help='show this help message and exit') my_sub_parser1.set_defaults(func=some_func) args = main_parser.parse_args()
运行后帮助输出会带分组标题,结构更清晰:
$ ./my-prog.py abc -h usage: my-prog abc [--suboption] [--foo FOO] [--bar BAR] [-h] 子命令专属选项: --suboption help for suboption 通用选项: --foo FOO help for --foo --bar BAR help for --bar 帮助选项: -h, --help show this help message and exit
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

