我的目标是
myScript init
没有更多运行类/操作InitAction
。myScript foo /tmp
使用给定的“/ tmp”FooAction
使用argparse我编写了这个解析器
parser = argparse.ArgumentParser(description="Look like GIT!")
parserCommands = parser.add_subparsers(title="Actions")
init_parser = parserCommands.add_argument('init', help='Set up')
destroy_parser = parserCommands.add_parser('destroy', help='Tear down')
直到这里好,但我想将init
绑定到InitAction(argparse.Action)
。有点像action=InitAction
的东西,但不幸的是,那里不允许这样做。
在终端中编写myScript.py init
时,您是否知道如何运行InitAction?
答案 0 :(得分:2)
argparse
文档中有一个基于subparser命令调用函数的示例
16.4.5.1。子命令
处理子命令的一种特别有效的方法是结合使用add_subparsers()方法和对set_defaults()的调用,以便每个子分析器知道它应该执行哪个Python函数。例如:
>>> # create the parser for the "foo" command
>>> parser_foo = subparsers.add_parser('foo')
>>> ...
>>> parser_foo.set_defaults(func=foo)
...
>>> # parse the args and call whatever function was selected
>>> args = parser.parse_args('foo 1 -x 2'.split())
>>> args.func(args)
以下是使用'dest'的示例:
add_subparsers()调用的dest关键字参数将起作用'
我认为你不想继承argparse.Action
。通常,Action
会在args
命名空间中放置一个值。 'init'字符串实际上是一个Subparsers Action用来将控制传递给init_parser
的值。这就是你自己的Action类不合适的原因。你想要的是在parse_args
完成后可以运行的功能,它需要使用的是args
。