其前身是 optparse,不过 argparse 是在 2.7 才出现的新模块,用的时候要小心。
使用 argparse 主要是使用 argparse.ArgumentParser 类,通过 add_argument 方法获得所支持的 options:
- 构造函数的参数有 description(命令的描述),epilog(参数帮助之后写的内容),prog(命令名),usage(使用方法,默认会自动生成),add_help(是否添加 -h/--help,默认为 True),argument_default(参数默认值),parents(额外的 parser),prefix_chars(选项前的字符组成的集合,默认为 '-'),conflict_handler(出现冲突后怎么处理,一般不需要),formatter_class;
print_help() 用于产生帮助信息;
- parse_args() 可以调用建立好的 parser 处理一个 list,返回 argparse.Namespace 对象,可以用该对象的成员(名字和 argument 一样)获得对应的值;
- add_argument() 方法可以添加两种参数,一种是选项(可有可无),一种是必须有的,两者差别在于对应的 add_argument 第一个参数(name or flag)是不是用 '-' 开始的字符串,如 add_argument( '-f', '--foo') 和 add_argument( 'bar' ) 就分别对应 -f 可选而 bar 是不可选,每个 argument 可以用 nargs 决定是否接受参数以及参数个数(> 0,如果仅仅需要有或者没有的区别,需要更改 action),nargs 可以取整数,也可以取 '?' 表示至多一个,如果没有给出将使用 default 给出的默认值;action 表示出现该 argument 后的行为,默认是 'store' 表示存储一个 list,默认的 nargs 是 1,可以用 store_const 使得存下来的是常数;store_true 和 store_false 表示仅存一个 boolean,无参数;'append' 允许将多个参数添加到一个 list 里面;对应有 append_const;另外有 version,这时需要 add_argument 的 version 参数,一般用作产生程序的版本信息;const 参数用于存放对应 store_const 或者 sppend_const 的默认值,默认为 None;type 允许进行类型转换;choices 限定该参数的取值范围;required 表示不可缺少,默认为 False;help 用于打印帮助信息;metavar 用于在帮助信息中现实选项的参数;dest 用来表示产生 argparse.Namespace 对象时存放该选项的成员名字;
- add_subparser 允许添加多个 parser(类似的有 svn 命令,hadoop 等);
- add_argument_group 允许用户将 argument 分组;
- set_defaults 允许直接设定默认值;
下面是一个简单的使用 argparse 的例子,
#!/opt/local/bin/python2.7
import argparse
import sys
if __name__ == '__main__':
parser = argparse.ArgumentParser( description='test program for argparse' )
parser.add_argument( '-n', '--negate', help='negate the result', \
action='store_false' )
parser.add_argument( 'integer', help='integers to operate with', \
action='store', metavar='N', nargs=2, type=int)
parser.add_argument( '-o', '--operation', help = 'operations', \
choices='+-*/', dest='op', nargs='?', default='+' )
parser.add_argument( '-v', '--version', help='version information', \
action='version', version=sys.argv[0] + ' 0.1' )
res = parser.parse_args( sys.argv[1:] )
if res.op == '+':
x = res.integer[0] + res.integer[1]
elif res.op == '-':
x = res.integer[0] - res.integer[1]
elif res.op == '*':
x = res.integer[0] * res.integer[1]
elif res.op == '/':
x = res.integer[0] / res.integer[1]
else:
print 'you shouldn\'t reach here!'
sys.exit(1)
print x
sys.exit(0)我们可以在命令行上面玩玩这个简单的四则运算
$ ./test09.py
usage: test09.py [-h] [-n] [-o [{+,-,*,/}]] [-v] N N
test09.py: error: too few arguments
$ ./test09.py -h
usage: test09.py [-h] [-n] [-o [{+,-,*,/}]] [-v] N N
test program for argparse
positional arguments:
N integers to operate with
optional arguments:
-h, --help show this help message and exit
-n, --negate negate the result
-o [{+,-,*,/}], --operation [{+,-,*,/}]
operations
-v, --version version information
$ ./test09.py -v
./test09.py 0.1
$ ./test09.py 14 87
101
$ ./test09.py 14 87 -o -
-73