Py之argparse:Python库之argparse(命令行解析)简介、安装、使用方法之详细攻略
导读
python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块。argparse从python 2.7开始被加入到标准库中,所以如果你的python版本还在2.7以下,那么需要先手动安装。除了这两种之外,还有其他框架的命令行解析法,比如TF flags。
目录
argparse简介
argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。当然,Python 也有第三方的库可用于命令行解析,而且功能也更加强大,比如 docopt,Click。
python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块。argparse从python 2.7开始被加入到标准库中,所以如果你的python版本还在2.7以下,那么需要先手动安装。
AgPARSE模块使得编写用户友好的命令行接口变得容易。该程序定义了它需要什么参数,而AgPARSE将解析如何解析那些Sy.ARGV中的那些参数。当用户给程序无效参数时,AgPARSE模块也会自动生成帮助和使用消息并发出错误。
1、命令行的应用
在ML、DL中,往往有过多的Hyperparameter需要调优,优化算法、学习率、卷积核尺寸等很多参数都需要不断调整,使用命令行参数是非常方便的。有两种实现方式,
1、利用python的argparse包
2、调用tensorflow自带的app.flags实现
argparse安装
默认安装
argparse使用方法
1、一个简单示例
主要有三个步骤:
ArgumentParser() #创建对象
add_argument() #调用方法添加参数
parse_args() #使用解析添加的参数
基本使用
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("echo",help="echo the string")
args=parser.parse_args()
print args.echo
import argparse
parser = argparse.ArgumentParser(description='Python之 argparse库的使用说明.')
parser.add_argument('frist', metavar='a', type=str,
help='Path to the image to open.')
parser.add_argument('second', metavar='b', type=str,
help='Path to the image to save.')
parser.add_argument('third', metavar='c', type=str,
help='Prefix for the saved results.')
args = parser.parse_args()
image_open_path = args.frist
image_save_path = args.second
image_prefix = args.third
2、深度学习算法的一个小案例
调用python的argparse包,调用函数parser.parse_known_args()解析命令行参数。代码运行后得到的FLAGS是一个结构体。
import argparse
import sys
parser = argparse.ArgumentParser()
parser.add_argument('--fake_data', nargs='?', const=True, type=bool,
default=False,
help='If true, uses fake data for unit testing.')
parser.add_argument('--max_steps', type=int, default=1000,
help='Number of steps to run trainer.')
parser.add_argument('--learning_rate', type=float, default=0.001,
help='Initial learning rate')
parser.add_argument('--dropout', type=float, default=0.9,
help='Keep probability for training dropout.')
parser.add_argument('--data_dir', type=str, default='/tmp/tensorflow/mnist/input_data',
help='Directory for storing input data')
parser.add_argument('--log_dir', type=str, default='/tmp/tensorflow/mnist/logs/mnist_with_summaries',
help='Summaries log directory')
FLAGS, unparsed = parser.parse_known_args()
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
3、最经典结构案例
先定义主函数,然后传入argparse类型参数变量,每个变量设置默认值。
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('--font_ch', default='F:/File_Python/Python_daydayup/data_input/LPR/font/platech.ttf')
parser.add_argument('--font_en', default='F:/File_Python/Python_daydayup/data_input/LPR/font/platechar.ttf')
parser.add_argument('--bg_dir', default='F:/File_Python/Python_daydayup/data_input/LPR/NoPlates')
parser.add_argument('--out_dir', default='F:/File_Python/Python_daydayup/data_input/LPR/plate_train', help='output dir')
parser.add_argument('--make_num', default=100, type=int, help='num') # default=10000
parser.add_argument('--img_w', default=120, type=int, help='num')
parser.add_argument('--img_h', default=32, type=int, help='num')
return parser.parse_args()
def main(args):
G = GenPlate(args.font_ch, args.font_en, args.bg_dir)
G.genBatch(args.make_num,2,range(31,65), args.out_dir, (args.img_w, args.img_h))
if __name__ == '__main__':
main(parse_args())