的文档提供
subcommands了两个如何标识子解析器的示例。
https://docs.python.org/dev/library/argparse.html#sub-
commands
一种是给
add_subparsersa
dest:
def do_quit(args): # action quit()parser = ArgumentParser()subparser = parser.add_subparsers(dest='cmd')....subparser.add_parser('quit')...args = parser.parse_args()print args.cmd # displays 'quit'if args.cmd == 'quit': do_quit(args)
另一种是用于
set_defaults将子解析器与函数链接:
parser = ArgumentParser()subparsers = parser.add_subparsers()...parser_quit = subparsers.add_parser('quit')parser_quit.set_defaults(func=do_quit)...args = parser.parse_args()args.func(args)
进一步考虑,这是使用custom的一种方法
Action。就像
_HelpAction(被所使用
-h)。由带有
nargs=0(或’?’)的位置参数调用。即使没有与之匹配的字符串(或更确切地说,有0个字符串与之匹配),也会始终调用此类参数。这是如何处理位置的合乎逻辑的但有些晦涩的结果。
class QuitAction(argparse.Action): def __call__(self, parser, *args, **kwargs): parser.exit(message="QUITTINGn")p=argparse.ArgumentParser()sp=p.add_subparsers(dest='cmd')p1=sp.add_parser('quit')p1.add_argument('foo', action=QuitAction, nargs='?', help=argparse.SUPPRESS)p.parse_args(['quit'])
产生(在Ipython中运行时):
QUITTINGAn exception has occurred, use %tb to see the full traceback. SystemExit: 0
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)