Mr_*_*s_D 15 python python-2.7 argparse
我正在向我的解析器添加subparsers来模拟子命令功能(例如代码见:python中的简单命令行应用程序 - 解析用户输入?).现在我想添加一个quit不带参数的subparser/command并附加一个"quit"动作.可能吗 ?我该怎么办呢?
hpa*_*ulj 18
该文档提供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)
Run Code Online (Sandbox Code Playgroud)
另一种是用于set_defaults将subparser与函数链接:
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)
Run Code Online (Sandbox Code Playgroud)
进一步思考,这是一种使用自定义的方式Action.它就像_HelpAction(由a使用-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'])
Run Code Online (Sandbox Code Playgroud)
生产(在Ipython中运行时):
QUITTING
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5969 次 |
| 最近记录: |