argparse模块 python获取环境变量运行脚本

一、argparse模块介绍


argparse模块作为optparse的一个替代被添加到Python2.7。argparse的实现支持一些不易于添加到optparse以及要求向后不兼容API变化的特性,因此以一个新模块添加到标准库。argparse通过在程序中定义好我们需要的参数,其将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。当然,Python 也有第三方的库可用于命令行解析,而且功能也更加强大,比如 docoptClick
 

二、argparse 使用


使用argparse 配置命令行参数时,需要三步:

1. 创建 ArgumentParser() 对象
2. 调用 add_argument() 方法添加参数
3. 使用 parse_args() 解析添加的参数
第一步和第三步基本是固定的,第二步是参数配置的关键。我们可以先看下add_argument() 方法的定义:

1. ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
其具体参数解释如下:

• name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo。
• action - 命令行遇到参数时的动作,默认值是 store。
• store_const,表示赋值为const;
• append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
• append_const,将参数规范中定义的一个值保存到一个列表;
• count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;

• nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
• const - action 和 nargs 所需要的常量值。
• default - 不指定参数时的默认值。
• type - 命令行参数应该被转换成的类型。
• choices - 参数可允许的值的一个容器。
• required - 可选参数是否可以省略 (仅针对可选参数)。
• help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.
• metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
• dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
 

三、示例


 

1、传一个简单的int型参数


代码如下:

1. # -*- coding: utf-8 -*-
2. import argparse
3. parser = argparse.ArgumentParser()
4. parser.add_argument('integer', type=int, help='display an integer')
5. args = parser.parse_args()
6. print args.integer
代码执行结果如下:

1. $ python argparse_usage.py
2. usage: argparse_usage.py [-h] integer
3. argparse_usage.py: error: too few arguments
4. $ python argparse_usage.py abcd
5. usage: argparse_usage.py [-h] integer
6. argparse_usage.py: error: argument integer: invalid int value: 'abcd'
7. $ python argparse_usage.py -h
8. usage: argparse_usage.py [-h] integer
9. positional arguments:
10. integer display an integer
11. optional arguments:
12. -h, --help show this help message and exit
13. $ python argparse_usage.py 10
14. 10
从上面可以看出,当传的参数不是int型时,其会报错,使用-h查看帮助信息时,其会自动给出提示。
 

2、可选参数示例



1. # -*- coding: utf-8 -*-
2. import argparse
3. parser = argparse.ArgumentParser()
4. parser.add_argument("--square", help="display a square of a given number", type=int)
5. parser.add_argument("--cubic", help="display a cubic of a given number", type=int)
6. args = parser.parse_args()
7. if args.square:
8. print args.square**2
9. if args.cubic:
10. print args.cubic**3
具体执行结果如下:

1. $ python argparse_usage.py --h
2. usage: argparse_usage.py [-h] [--square SQUARE] [--cubic CUBIC]
3. optional arguments:
4. -h, --help show this help message and exit
5. --square SQUARE display a square of a given number
6. --cubic CUBIC display a cubic of a given number
7. $ python argparse_usage.py --square 8
8. 64
9. $ python argparse_usage.py --cubic 8
10. 512
11. $ python argparse_usage.py 8
12. usage: argparse_usage.py [-h] [--square SQUARE] [--cubic CUBIC]
13. argparse_usage.py: error: unrecognized arguments: 8
14. $ python argparse_usage.py # 没有输出
 

3、长短型参数使用



1. #!/usr/bin/env python
2. # encoding: utf-8
3. import argparse
4. parser = argparse.ArgumentParser()
5. parser.add_argument("-v", "--verbosity", help="increase output verbosity")
6. args = parser.parse_args()
7. if args.verbosity:
8. print "verbosity turned on"
具体执行如下:

1. $ python prog.py -v 1
2. verbosity turned on
3. $ python prog.py --verbosity 1
4. verbosity turned on
5. $ python prog.py -h
6. usage: prog.py [-h] [-v VERBOSITY]
7. optional arguments:
8. -h, --help show this help message and exit
9. -v VERBOSITY, --verbosity VERBOSITY
10. increase output verbosity
11. $ python prog.py -v
12. usage: prog.py [-h] [-v VERBOSITY]
13. prog.py: error: argument -v/--verbosity: expected one argument
 

4、可选值可选值choices=[]示例


如果要限定某个值的取值范围,比如限定其取值范围为0, 1, 2,该如何进行呢?示例如下:

1. #!/usr/bin/env python
2. # encoding: utf-8
3. import argparse
4. parser = argparse.ArgumentParser()
5. parser.add_argument("square", type=int,
6. help="display a square of a given number")
7. parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
8. help="increase output verbosity")
9. args = parser.parse_args()
10. answer = args.square**2
11. if args.verbosity == 2:
12. print "the square of {} equals {}".format(args.square, answer)
13. elif args.verbosity == 1:
14. print "{}^2 == {}".format(args.square, answer)
15. else:
16. print answer
执行结果如下:

1. $ python prog.py 4 -v 3
2. usage: prog.py [-h] [-v {0,1,2}] square
3. prog.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
4. $ python prog.py -h
5. usage: prog.py [-h] [-v {0,1,2}] square
6. positional arguments:
7. square display a square of a given number
8. optional arguments:
9. -h, --help show this help message and exit
10. -v {0,1,2}, --verbosity {0,1,2}
11. increase output verbosity
 

5、互斥参数示例


定义互斥的选项是选项分组特性的一个特例,使用add_mutually_exclusive_group()而不是add_argument_group()。示例如下:

1. import argparse
2. parser = argparse.ArgumentParser()
3. group = parser.add_mutually_exclusive_group()
4. group.add_argument('-a', action='store_true')
5. group.add_argument('-b', action="store_true")
6. print parser.parse_args()
如果参数a、b同时出现,会出现如下报错:

1. $ python argparse_mutually_exclusive.py -a -b
2. usage: argparse_mutually_exclusive.py [-h] [-a | -b]
3. argparse_mutually_exclusive.py: error: argument -b: not allowed with argument -a
 

6、可变型参数列表


可以配置单个参数的定义使其能够匹配所解析的命令行的多个参数。根据需要或期望的参数个数,设置nargs为这些标识值之一:

1. 值 含义
2. N 参数的绝对个数(例如:3)
3. ? 0或1个参数
4. * 0或所有参数
5. + 所有,并且至少一个参数
示例如下:

1. import argparse
2. parser = argparse.ArgumentParser(description='Process some integers.')
3. parser.add_argument('integers', metavar='N', type=int, nargs='+',
4. help='an integer for the accumulator')
5. parser.add_argument('--sum', dest='accumulate', action='store_const',
6. const=sum, default=max,
7. help='sum the integers (default: find the max)')
8. args = parser.parse_args()
9. print args.accumulate(args.integers)
执行结果如下:

1. $ python prog.py -h
2. usage: prog.py [-h] [--sum] N [N ...]
3. Process some integers.
4. positional arguments:
5. N an integer for the accumulator
6. optional arguments:
7. -h, --help show this help message and exit
8. --sum sum the integers (default: find the max)
9. $ python prog.py 1 2 3 4
10. 4
11. $ python prog.py 1 2 3 4 --sum
12. 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值