argparse模块提供了一个用户友好的命令行交互方式。
1. 使用时,导入模块并实例化一个对象:
#导入模块
import argparse
#实例化对象
parser = argparse.ArgumentParser(description='study argmarse module')
# description - Text to display before the argument help (by default, no text)
print(parser.print_help())
运行后显示为:
usage: [-h]
study parser module
optional arguments:
-h, --help show this help message and exit
None
2. 另一个重要的是使用add_argument()
它定义单个的命令行参数应当如何解析。具体用法如下:
#对于上文定义的parser,调用add_argument()
parser.add_argument('--number',default=1.0,type=float)
这里定义了一个number的参数,默认参数值是1.0,type是float。假设这个python文件名是study_parser.py文件,那么在linux的terminal命令行中可以使用 python study_parser.py --number=2将参数传递进入parser的属性中。
3. parse_args()
获取parser中定义的参数
args = parser.parse_args()
print(args)
打印结果为:
Namespace(number=1.0)
可以看到之前定义的number在namespace中。
4. 为什么在add_argument()中定义参数是--number这里变成了number?
因为命令行对参数的定义通常加上--这个符号。
比如命令行ls命令,如果查询ls命令的帮助通常是使用命令
ls --help
ls也有另一个参数 --all
ls --all
5. 一个完整的例子
在文件demo.py里定义这样一个函数,可以看到这里是定义了一个实例parser并返回parser
import argparse
def get_args_parser():
parser = argparse.ArgumentParser('model hyper-parameters', add_help=False)
# Training Parameters
parser.add_argument('--lr', type=float,default=0.002)
parser.add_argument('--batch_size', type=float,default=50)
parser.add_argument('--num_epoch', type=int,default=10)
return parser
if __name__ == '__main__':
parser = get_args_parser()
args = parser.parse_args()
print(args)
运行结果
Namespace(lr=0.002, batch_size=50, num_epoch=10)
将这个文件在linux的terminal命令行中运行:
python demo.py --lr=0.1 --batch_size=60 --num_epoch =30
输出为:
Namespace(batch_size=60.0, lr=0.1, num_epoch=30)
可以发现使用命令行将参数 lr,batch_size,num_epoch三个参数传入到了parser中,这三个参数的默认值发生了改变。