git就像python中的命令一样

时间:2014-02-19 23:19:06

标签: python git argparse

我的目标是

  • 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?

1 个答案:

答案 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