您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python argparse-将动作添加到不带参数的子解析器?

python argparse-将动作添加到不带参数的子解析器?

的文档提供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="QUITTING\n")

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中运行时):

QUITTING
An exception has occurred, use %tb to see the full traceback.    
SystemExit: 0
python 2022/1/1 18:39:32 有437人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶