按名称获取子解析器
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)
我有多个子解析器,我想使用 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)