介绍
最近在看深度学习的一些代码,发现大佬们经常使用argparse包,于是看了看这个包的简单用法。 argparse是Python的内置包,不需要手动安装。它是Python 标准库中推荐的命令行解析模块。
传入一个位置参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-epochs', type=int, help='训练轮次')
args = parser.parse_args()
print(args.epochs)
add_argument函数用于指定程序能够接受哪些命令行选项。
1. 第一个参数为添加的位置参数名称
2. 第二个参数 type 为该位置参数的类型
3. 第三个参数 help 为提示信息
打开命令行窗口,切换到当前目录,输入命令 python test.py -epochs 100 可以看到输出结果为100.
输入命令 python test.py -h 或 python test.py --help 可以看到帮助信息:
usage: test.py [-h] [-epochs EPOCHS]
optional arguments:
-h, --help show this help message and exit
-epochs EPOCHS 训练轮次
为单个参数传入多个值
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-epochs', type=int, nargs='+', help='训练轮次')
args = parser.parse_args()
print(args.epochs)
在 add_argument 方法中设置 nargs 参数可以输入多个值,其中:
'+' 表示参数可设置一个或多个
'*' 表示参数可设置零个或多个
'?' 表示参数可设置零个或一个
N 表示参数为N个
在命令行中输入 python test.py -epochs 100 80 50 10 , 将看到返回结果:[100, 80, 50, 10]
添加多个参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-epochs', type=int, help='训练轮次')
parser.add_argument('-learning_rate', type=float, help='学习率')
parser.add_argument('-image_size', type=int, help='输入图片大小')
args = parser.parse_args()
print('训练轮次:', args.epochs)
print('学习率:', args.learning_rate)
print('图片大小:', args.image_size)
在命令行中输入 python test.py -epochs 100 -learning_rate 0.001 -image_size 224 ,可以看到输出的结果:
训练轮次: 100
学习率: 0.001
图片大小: 224
可选参数
有时候我们会遇到可选的参数,在参数名前加 '--' 即可。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-epochs', type=int, help='训练轮次')
parser.add_argument('--checkpoint', type=bool, help='是否保存检查点')
args = parser.parse_args()
print('训练轮次:', args.epochs)
print('是否保存检查点:', args.checkpoint)
在命令行中输入 python test.py -epochs 100 ,可以看到输出结果:
训练轮次: 100
是否保存检查点: None
输入 python test.py -epochs 100 --checkpoint True ,则输出结果变为:
训练轮次: 100
是否保存检查点: True
短选项
如果你熟悉命令行的用法,会知道可以为参数设置一个便捷输入。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-epochs', type=int, help='训练轮次')
parser.add_argument('-lr', '--learning_rate', type=float, help='学习率')
args = parser.parse_args()
print('训练轮次:', args.epochs)
print('学习率:', args.learning_rate)
在命令行输入 python test.py -epochs 100 --learning_rate 0.001 ,可以看到输出结果:
训练轮次: 100
学习率: 0.001
输入 python test.py -epochs 100 -lr 0.001 , 也可以得到相同的输出结果。这样可以方便一些参数的输入。
从代码中可以看到短选项只能与可选参数搭配使用。
默认值
可以在 add_argument 方法中设置 default 参数,来为参数指定默认值。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-epochs', type=int, default=100,help='训练轮次')
parser.add_argument('-lr', '--learning_rate', type=float, default=0.001,help='学习率')
args = parser.parse_args()
print('训练轮次:', args.epochs)
print('学习率:', args.learning_rate)
在控制台输入命令 python test.py , 可以得到运行结果:
训练轮次: 100
学习率: 0.001
必须参数
可以在 add_argument 方法中设置 required 参数,指定该参数必须输入。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-epochs', type=int, required=True, help='训练轮次')
args = parser.parse_args()
print('训练轮次:', args.epochs)
在命令行输入 python test.py ,将会报错:
usage: test.py [-h] -epochs EPOCHS
test.py: error: the following arguments are required: -epochs
如果不指定 required=True , 若不传入值,则默认为None,而现在不传入值,将会报错。
输入 python test.py -epochs 50 , 将会看到期望的结果50
限定参数的值
可以在 add_argument 方法中设置 choices 参数,指定该参数的可能值。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-epochs', type=int, choices=[10,50,100],help='训练轮次')
args = parser.parse_args()
print('训练轮次:', args.epochs)
我们使用 choices 将 epochs 的取值限定为 10,50,100,如果输入的数不在这三个数之中,则会报错。
更改 parse_args 中的参数名称
可以在 add_argument 方法中设置 dest 参数,指定该参数在parse_args中的名称。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-epochs', type=int, dest='e',help='训练轮次')
args = parser.parse_args()
print('训练轮次:', args.e)
上面的代码中,我们使用 dest 将 epochs 参数在parse_args 中的名称改为了 e 。 注意在命令行中输入的命令仍为 python test.py -epochs 5
|