15.4.1 实例
该程序以一组整数作为输入, 并输出其和或最大值
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print args.accumulate(args.integers)
将上面代码保存到prog.py, 可以在命令行运行并自动打印相关帮助信息
$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]
Process some integers.
positional arguments:
N an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
--sum sum the integers (default: find the max)
当输入适当的参数时, 程序会打印出最大值或者是其和
$ python prog.py 1 2 3 4
4
$ python prog.py 1 2 3 4 --sum
10
如果非法参数传入,会抛出相应错误
$ python prog.py a b c
usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a
15.4.1.1 Creating a praser创建解析器
首先创建一个ArgumentParser对象
>>> parser = argparse.ArgumentParser(description='Process some integers.')
ArgumentParser对象包括解析命令行参数到python数据类型的所有必要信息
15.4.1.2 Adding arguments添加参数
通过add_arguments()方法给程序添加相关参数. 这些调用会告诉ArgumentParser怎样解析命令行字符串,并将其转化为相应的python对象, add_arguments相关信息会在parse_args()方法被调用时存储并使用,比如
>>> parser.add_argument('integers', metavar='N', type=int, nargs='+',
... help='an integer for the accumulator')
>>> parser.add_argument('--sum', dest='accumulate', action='store_const',
... const=sum, default=max,
... help='sum the integers (default: find the max)')
然后调用parse_args()方法会返回带有intergers和accumulate属性的对象. intergers属性是一个整型list, accumulate属性则是一个sum()函数(如果--sum参数被指定)或者是max()函数
15.4.1.3 Parsing arguments解析参数
ArgumentParser通过parse_args()函数来解析参数. 通过检查命令行, 将每个参数转化成适当类型, 然后调用相关action(函数). 大多数情况, 会根据解析的命令行参数来构造一个Namespace对象:
>>> parser.parse_args(['--sum', '7', '-1', '42'])Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])
在python脚本中, parse_args()典型的用法是不带任何参数, ArgumentsParser会自动根据sys.argv获得的命令行参数进行解析