按名称获取子解析器

Get subparser by name

我有多个子解析器,我想使用 parser.error 来显示错误。

main_parser   = argparse.ArgumentParser()
subparsers    = main_parser.add_subparsers(dest = 'subparser_name')  

password_subparser = subparsers.add_parser('password')
password_subparser.add_argument('--username',
        default = None, required = False,
        dest = "username", help='Target username')

web_subparser = subparsers.add_parser('web')
web_subparser.add_argument('--port',
        default = 8765, required = False, type = int,
        dest = "port", help='Listening port')

args = main_parser.parse_args()

通常我可以使用main_parser.error,但为了更精确地报错,我应该使用当前的子解析器,例如password_subparser

现在我知道了当前子解析器的名称,也就是 args.subparser_name

但我无法从 main_parser 找到 password_subparser,有什么想法吗?

没有像main_parser.get_subparser(subparser_name)

这样的方法

虽然没有在任何地方记录,但您似乎可以通过 subparsers.choices 字典访问子解析器:

>>> subparsers.choices['password']
ArgumentParser(prog='untitled.py password', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)