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获得的命令行参数进行解析

results matching ""

    No results matching ""