python模块之argparse:强大的命令行参数解析模块

时间:2022-10-27 16:59:22

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

参考文献:

  1. http://blog.openvs.info/python-optparse%E6%A8%A1%E5%9D%97/
  2. http://blog.csdn.net/songuooo/article/details/8373086