python模块之argparse:强大的命令行参数解析模块
在用argparse模块之前,我一直是用optget模块,optget也比较简单好用,但是不够强大。比如说optget无法解析一个参数多个值的情况,如 --file file1 file2 file3...。经过一番寻寻觅觅之后发现了argparse这一神器,它能满足我对命令解析器的所有需求。它支持解析一参数多值,可以自动生成help命令和帮助文档,支持子解析器,支持限制参数取值范围等等功能。
先新建一个解析器
import argparse
parser = argparse.ArgumentParser(description='This is a description of %(prog)s', epilog='This is a epilog of %(prog)s',
prefix_chars='-+', fromfile_prefix_chars='@', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
如果还有子命令的话,需要建一个子解析器
subparsers = parser.add_subparsers(help='sub-command help')
create_parser = subparsers.add_parser('create', help='fcg-easy create -h')
为解析器添加参数
create_parser.add_argument('-g', '--group', type=str)
添加具有多个值的参数
需要在添加参数时指定nargs='+',如果某一参数具有多个值,那么将会得到一个值列表
create_parser.add_argument('-d', '--disk', nargs='+', type=str)
还可以为解析器指定执行的函数
create_parser.set_defaults(func=main_create)
最后解析参数
args = parser.parse_args(cmdline)得到的args是一个命名空间,空间里的变量名就是每个参数名,其值就是解析到的参数值。
随后可以执行为命令指定的函数
args.func(args)
完整代码参考
https://github.com/lihuiba/flashcachegroup/blob/master/fcg-easy.py