python中类似git的命令

python中类似git的命令,python,git,argparse,Python,Git,Argparse,我的目标是 myScript init无需更多操作即可运行类/actionInitAction myScript foo/tmp使用给定的/tmp运行类/操作FooAction 我用argparse编写了这个解析器 parser = argparse.ArgumentParser(description="Look like GIT!") parserCommands = parser.add_subparsers(title="Actions") init_parser = parse

我的目标是

  • myScript init
    无需更多操作即可运行类/action
    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吗?

文档中有一个基于subparser命令调用函数的示例

16.4.5.1。子命令

处理sub命令的一种特别有效的方法是将add_subparser()方法的使用与set_defaults()的调用结合起来,以便每个subparser知道应该执行哪个Python函数。例如:

下面是使用“dest”的示例:

add_subparsers()调用的dest关键字参数将起作用'

我认为您不想子类化
argparse.Action
。通常,
操作
会在
args
命名空间中放置一个值。“init”字符串实际上是subparsers操作用来将控制传递给
init\u解析器的值。这就是为什么你自己的动作课不适合你。您需要的是在
parse_args
完成后可以运行的函数,它只需要使用
args

>>> # 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)