如何要求需要提供次级解析器?

时间:2019-05-01 16:15:43

标签: python argparse

我想确保至少选择了一个子命令。但是add_subparsers()没有必需的选项,如何强制至少选择一个子解析器?

目前,我是这样做的以模仿效果:

subparsers = parser.add_subparsers(
    title='sub commands',
    help='valid sub commands',
)
subparser1 = subparsers.add_parser('subcmd1')
subparser1.set_defaults(which_subcmd='subcmd1')
subparser2 = subparsers.add_parser('subcmd2')
subparser2.set_defaults(which_subcmd='subcmd2')
parsedargs = parser.parse_args()
if 'which_subcmd' not in parsedargs:
    parser.print_help()

但是我想要一种正式的方法来使帮助内容显示类似{subcmd1 | subcmd2}

更新:

根据@hpaulj,在3.7中有必需的选项。但是我希望可以在python 3.5和3.6中正常工作

1 个答案:

答案 0 :(得分:0)

除了打印帮助,我更想提出一个错误:

if which_subcmd not in parsedargs:
    msg = "Subcommands needed: subcmd1, subcmd2"
    raise argparse.ArgumentTypeError(msg)

这种方式与其他argparse错误更加一致。但是只是一个口味的问题。只要您在该print_help()语句之后退出脚本,我就不会认为您的方法有什么问题。