我想确保至少选择了一个子命令。但是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中正常工作
答案 0 :(得分:0)
除了打印帮助,我更想提出一个错误:
if which_subcmd not in parsedargs:
msg = "Subcommands needed: subcmd1, subcmd2"
raise argparse.ArgumentTypeError(msg)
这种方式与其他argparse错误更加一致。但是只是一个口味的问题。只要您在该print_help()
语句之后退出脚本,我就不会认为您的方法有什么问题。