argparse命令行解析Python模块
作者:互联网
最近需要给一个python脚本做成通用的脚本,不需要看源码,其他人拿到脚本就知道该如何使用。sys库的argv办不到这种效果,但Python的argparse库能够很好达到这个效果,拿到脚本,输入-h,就可以看到各参数含义以及脚本的作用,那么下面直接来学习argparse库的一些简单使用方法
argparse介绍
argsparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行
argparse简单例子
使用步骤:
1、实例化一个argparse.ArgumentParser对象,并添加description参数用来描述脚本的作用
2、通过add_argument方法来设置参数的名称、数据类型,参数含义,默认值等
3、parse_args()用来解析传入的参数,返回的会是一种类似于python字典的数据类型
import argparse #实例化,description添加描述脚本作用,会在输入-h后,打印出来 parser = argparse.ArgumentParser(description='命令行中传入一个数字:') #type是要传入的参数的数据类型,help是该参数的提示信息 parser.add_argument('integers',type=str,help='传入的数字') #解析传入参数 args = parser.parse_args() print(args)
在cmd窗口当前py路径下执行python demo.py -h
会打印出使用的例子,脚本描述,以及参数描述等信息
在cmd窗口当前py路径下执行python demo.py 2
输出结果
Namespace(integers='2')
输出结果是是一种类似于python字典的数据类型
但可以使用arg.参数名来提取对应参数值
print(args.integers)
#输出结果2
nargs参数
nargs是用来说明传入的参数个数,'+' 表示传入至少一个参数
parser.add_argument('integers',nargs='+',type=str,help='传入的数字')
我们重新在cmd窗口执行命令,来传入4个数字是什么效果
可以执行完成后,返回的是一个列表,integers这个参数接收了4个数值
type参数
设置传入参数的数据类型。我们看到代码中有type这个关键词,该关键词可以传入list, str, tuple, set, dict等
把上面的type=str,改成type=int,这时候我们就可以进行四则运算
import argparse parser = argparse.ArgumentParser(description='命令行中传入一个数字:') parser.add_argument('integers',nargs='+',type=int,help='传入的数字') args = parser.parse_args() print(f'总和:{sum(args.integers)}')
重新输入python demo.py 1 2 3 4,可以看到已经返回4个数值的相加总和
位置参数
在命令行中传入参数时候,传入的参数的先后顺序不同,运行结果往往会不同,这是因为采用了位置参数,例如
import argparse parser = argparse.ArgumentParser(description='姓名') parser.add_argument('p1',type=str,help='姓') parser.add_argument('p2',type=str,help='名') args = parser.parse_args() print(args.p1+args.p2)
分别输入python demo2.py 张 三和python demo2.py 三 张,打印的情况不一样,参数关系代码从小到下的参数顺序对应运行命令从左到右顺序,输出如下
可选参数
为了解决以上的麻烦,可以使用可选参数,只需要在参数前面加上--即可
parser.add_argument('--p1',type=str,help='姓') parser.add_argument('--p2',type=str,help='名')
输入命令python demo2.py --p2 三 --p1 张 和 python demo2.py --p1 张 --p2 三
可以看到参数与输入的值都对应上
可选参数不止可以加一个,可以加多个来使用(怎么方便怎么来,但获取参数名还是以--后面跟的为准)
import argparse parser = argparse.ArgumentParser(description='姓名') parser.add_argument('--p1','-pp1',type=str,help='姓') parser.add_argument('--p2','-pp2',type=str,help='名') args = parser.parse_args() print(args.p1+args.p2)
输入python demo2.py -pp2 三 -pp1 张
仍可以正常接收到输入的值
default默认值
有时候某个参数传入的值会保持不变,但如果每次执行都需要敲命令,会非常麻烦,那么可以加上default属性,后面跟所需要的传入的值就可以,
同时将所有参数都设上default,调试起来也会非常方便。运行跟平常运行py脚本一样
parser.add_argument('--p1','-pp1',type=str,help='姓',default='李') parser.add_argument('--p2','-pp2',type=str,help='名',default='四')
命令输入python demo2.py
后面不需要跟任何参数,可以直接打印获取到值
required必需参数
required可以设置该参数是否必需
下面我们跟参数--p1加上required必需参数
import argparse parser = argparse.ArgumentParser(description='姓名') parser.add_argument('--p1','-pp1',type=str,help='姓',default='李',required=True) parser.add_argument('--p2','-pp2',type=str,help='名',default='四') args = parser.parse_args() print(args.p1+args.p2)
哪怕存在default默认值,只要加了required必需参数,那么执行的时候,必须跟着此关键参数名称,如果没有包含,则会出现error提示,哪个参数是必须输入的
输入python demo2.py
可以看到,上面打印必须要输入--p1/-pp1参数
当将--p1参数的值输入,可以看到,能够正常打印出值
注意:required只有前面参数是可选参数,才能添加,如果是位置参数,加了required同样会造成报错
以上就是argparse一些简单的使用方法,能够满足大多数的需求
参考:https://zhuanlan.zhihu.com/p/56922793
标签:argparse,parser,Python,args,--,参数,命令行,type 来源: https://www.cnblogs.com/trystudy/p/16672608.html