argparse模块
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块
使用步骤
import argparse # 1 导入模块,这个没什么说的
parser = argparse.ArgumentParser() # 2 实例化一个对象,默认参数一堆,只有description参数可以设置一下
parser.add_argument() # 3 一次加入每一个参数或选项,主要是这里
parser.parse_args() # 4 获取参数,用的时候给他赋个值
1添加位置参数
import argparse#位置参数
def test01():# 先不添加参数parser = argparse.ArgumentParser(description='解析命令行参数')args = parser.parse_args()# 打印一下所有参数print(args)
上面的例子运行后,由于没有添加任何参数,所以看不出什么。不过可以加上-h 或 --help 运行一下,会显示我们自定义的description的内容,以及默认的help的内容
运行结果:
命令行运行结果:
2 添加参数说明
def test02():# 这里的关键参数去掉了,看看和刚才比缺少了什么parser = argparse.ArgumentParser()parser.add_argument('echo') # 添加一个位置参数args = parser.parse_args()print(args.echo) # 获取参数,打印出来print(args) # 看看整个的内容
if __name__ =="__main__":test02()
此时再运行程序,会提示你缺少参数。必须带上一个参数运行,比如test.py arg_test
。并且后面的参数只能是1个,就是不能多也不能少。
运行结果:
命令行运行结果:
3 设置参数的数据类型
def test03():parser = argparse.ArgumentParser(description='解析命令行参数')parser.add_argument('echo', help='直接打印这个参数的值', type=int)args = parser.parse_args()print(args.echo, type(args.echo)) # 获取参数,打印出来print(args) # 看看整个的内容
if __name__ =="__main__":test03()
运行结果:
命令行运行结果:
4 使用文件作为参数
#使用文件作为参数
def test04():parser = argparse.ArgumentParser()parser.add_argument('file', type=argparse.FileType('r')) # 读取文件args = parser.parse_args()# 打印文件内容for line in args.file:print(line.strip())
if __name__ =="__main__":test04()
命令行运行结果:
5 定义默认值
从刚才开始必须要带参数才能运行程序了,可以通过设置默认值来解决不带参数启动的问题
命令行运行结果:
6 参数候选值
使用choise关键参数,可以限定这个参数的值必须在候选的列表内。
def test06():parser = argparse.ArgumentParser(description='解析命令行参数')parser.add_argument('echo', choices=['a', 'b', 'c'], default='a', nargs='?')args = parser.parse_args()print(args.echo, type(args.echo)) # 获取参数,打印出来print(args) # 看看整个的内容
if __name__ =="__main__":test06()
这样只有输入正确才能正常执行,这里注意,如果有default,那么default的值也得再候选值之中。
7 选项参数
像-h 和 --help 一样,也可以设置自己的选项参数。设置的时候短参数和长参数可以值设置一个,如果没有冲突的话建议都写上。另外上面讲过的那些关键参数,比如说明、默认值、候选值都可以使用
#选项参数
def test07():parser = argparse.ArgumentParser(description='解析命令行参数')parser.add_argument('-v', '--verbose', help='increase verbosity')args = parser.parse_args()print(args.verbose, type(args.verbose)) # 获取参数,打印出来print(args) # 看看整个的内容
if __name__ =="__main__":test07()
如果有长参数,取值的时候就是使用长参数的名字取值。只有短参数的情况下才是用短参数的名字取值。当然也可以指定一个别的变量名。 和位置参数相反,选项参数默认是非必须。不输入选项的情况下取到的值是None,输入选项但是又没在后面写值而且也没默认值,则会出错。 如果需要,也可以将选项设置为必须输入。
运行结果:
命令行运行结果:
8 指定选项参数的默认名
使用required=True
后,这个选项就不再是可选的了,而是必须输入
#指定选项参数的变量名
def test08():parser = argparse.ArgumentParser(description='解析命令行参数')parser.add_argument('-v', '--verbose', help='increase verbosity',dest='ver',required=True) # 用dest来指定变量名args = parser.parse_args()print(args.ver, type(args.ver)) # 获取参数,打印出来。这里的变量名是自己在dest里指定的了print(args) # 看看整个的内容
if __name__ =="__main__":test08()
参考自https://www.imooc.com/article/34047