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
无需更多操作即可运行类/actionmyScript init
InitAction
使用给定的/tmp运行类/操作myScript foo/tmp
FooAction
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)