python之argparse
argparse 是 Python内置的用来处理命令行参数的库。写脚本时有时会用到,这里略做总结便于以后使用。
1 使用sys.argv模块:
脚本有时候需要传入一些命令参数:
- 在C语言里,main函数原型为int main(int argc, char ** argv) , 其中argc表示传入参数的个数,argv指向参数的指针数组
- python也有类似写法,命令行参数时存储在sys.argv里。
import sys
if __name__ == '__main__':
# 打印所有参数
for arg in sys.argv:
print(arg)
# 第一个arg指的是此脚本,传入的第一个参数,应该取第二个
print(sys.argv[1])
2 使用argparase模块:
2.1 argparase模块的常见写法
import argparse
# main函数入口,添加参数
if __name__ == '__main__':
parser = argparse.ArgumentParser() # 创建一个解析对象
parser.add_argument() # 向该对象添加参数
args = parser.parse_args() # 解析参数
2.2 argparse.ArgumentParser()函数
ArgumentParser常用参数description,大部分情况只会用到这个参数。
parser = argparse.ArgumentParser(description='argparase test')
2.3 parser.add_argument()函数
添加参数的形式:
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
参数 | 形式 |
---|---|
name or flags | 名字可以写很多个,一般写两个,一个短参数,一个长参数 可选选项位置不固定: parser.add_argument(“-f”, “–file”, help=”test file”) 位置固定的选项,调用属性也与sys.argv相同: parser.add_argument(“bar”, help=”test”) |
nargs | 表示这个参数后面的value有多少个 如-n 1 2 3 4来设置 n = [1 2 3 4],则可用如下方式(+表示至少一个,?表示该位置参数要么没有,要么就只要一个) parser.add_argument(“-n”, “–num”, nargs=”+”, type=int) |
default | 如果命令行中没有出现这个选项,则使用default指定的默认值。如: parser.add_argument(“-f”, “–file”, help=”test file”, default="test.txt") |
type | 如果希望传进来的参数时指定的类型,可以用type限定(如float、 int or file) parser.add_argument(“-x”, type=int) |
choices | 设置参数值的范围,如果choises中的类型不是字符串,需要指定type。如: parser.add_argument(“-y”, choices=[‘a’, ‘b’, ‘d’]) |
required | 通常可选选项(如-f等)可有可无,但如果required=True,则成为必须项 |
metavar | 参数的名字,在显示帮助信息是才用到 |
help | 设置这个选项的帮助信息 |
dest | 解析后的参数名称 |
action | argparse内置6种动作可以在解析参数时触发:store 保存参数值,可能会先将参数值转换成另一个数据类型,默认该动作store_const 保存一个被定义为参数规格的值(由const定义,见示例)store_true/store_false 保存相应的布尔值。被用于实现布尔开关append 将值保存到一个列表中。若参数重复出现,则保存多个值。append_const 将一个定义在参数规格中的值保存到一个列表中。version 打印关于程序的版本信息,然后退出 |
2.4 argparase模块使用示例
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))
结果:
$ py_test.py -h
usage: py_test.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)
PS E:\mine\wiki\git> python3 E:\mine\wiki\git\py_test.py 77 10 55
77
PS E:\mine\wiki\git> python3 E:\mine\wiki\git\py_test.py 77 10 55 --sum
142
可见默认是求数列最大值(max),如果传入--sum参数即是求累加和
参考: