Python ArgumentParse的subparser用法说明


Posted in Python onApril 20, 2020

在写一些很小的机器学习项目的时候,我们往往希望training, testing和inference能共用一个入口main,但是不同的功能使用不同的input参数.当然如果三个功能对应三个.py脚本问题也不大,但是毕竟觉得不太优雅.这个时候就需要考虑如何让代码更加简单有条理.

主要是最近在看parser有关的东西,所以看到了一个项目,里面的使用subparser的地方是值得借鉴的,下面附上代码和部分自己的一些见解

def main():
 parser = argparse.ArgumentParser()
 subparsers = parser.add_subparsers()

 hparams = make_hparams() 
 # 这个函数是直接写了一些超参数,讲真我不太喜欢这个操作,个人还是比较倾向用一个额外的config文件来存储
 # 这些超参,这样输入的只要是config文件的路径即可;主要是这么做可以看到自己每一步的参数是怎么设置的
 # 便于后期出现了问题来排错
 subparser = subparsers.add_parser("train")
 # add subparser here
 subparser.set_defaults(callback=lambda args: run_train(args, hparams))
 # 加上callback选项,run_train是前期定义的一个函数,这条和后面的args.callback(args)对应
 hparams.populate_arguments(subparser) 
 # 这里就是作者自己定义的一个函数,本质其实还是一系列的add_argument
 subparser.add_argument("--numpy-seed", type=int)
 subparser.add_argument("--model-path-base", required=True)
 subparser.add_argument("--evalb-dir", default="EVALB/")
 subparser.add_argument("--train-path", default="data/02-21.10way.clean")
 subparser.add_argument("--dev-path", default="data/22.auto.clean")
 subparser.add_argument("--batch-size", type=int, default=250)
 subparser.add_argument("--subbatch-max-tokens", type=int, default=2000)
 subparser.add_argument("--eval-batch-size", type=int, default=100)
 subparser.add_argument("--epochs", type=int)
 subparser.add_argument("--checks-per-epoch", type=int, default=4)
 subparser.add_argument("--print-vocabs", action="store_true")

 subparser = subparsers.add_parser("test")
 subparser.set_defaults(callback=run_test)
 subparser.add_argument("--model-path-base", required=True)
 subparser.add_argument("--evalb-dir", default="EVALB/")
 subparser.add_argument("--test-path", default="data/23.auto.clean")
 subparser.add_argument("--test-path-raw", type=str)
 subparser.add_argument("--eval-batch-size", type=int, default=100)

 subparser = subparsers.add_parser("ensemble")
 subparser.set_defaults(callback=run_ensemble)
 subparser.add_argument("--model-path-base", nargs='+', required=True)
 subparser.add_argument("--evalb-dir", default="EVALB/")
 subparser.add_argument("--test-path", default="data/22.auto.clean")
 subparser.add_argument("--eval-batch-size", type=int, default=100)

 subparser = subparsers.add_parser("parse")
 subparser.set_defaults(callback=run_parse)
 subparser.add_argument("--model-path-base", required=True)
 subparser.add_argument("--input-path", type=str, required=True)
 subparser.add_argument("--output-path", type=str, default="-")
 subparser.add_argument("--eval-batch-size", type=int, default=100)

 subparser = subparsers.add_parser("viz")
 subparser.set_defaults(callback=run_viz)
 subparser.add_argument("--model-path-base", required=True)
 subparser.add_argument("--evalb-dir", default="EVALB/")
 subparser.add_argument("--viz-path", default="data/22.auto.clean")
 subparser.add_argument("--eval-batch-size", type=int, default=100)

 args = parser.parse_args()
 args.callback(args)

补充知识:python 学习笔记--argparse模块以及parse_known_args()函数

代码test.py:

import argparse
import sys

parse=argparse.ArgumentParser()
parse.add_argument("--learning_rate",type=float,default=0.01,help="initial learining rate")
parse.add_argument("--max_steps",type=int,default=2000,help="max")
parse.add_argument("--hidden1",type=int,default=100,help="hidden1")
flags,unparsed=parse.parse_known_args(sys.argv[1:])
print flags.learning_rate
print flags.max_steps
print flags.hidden1
print unparsed

运行

python test.py --learning_rate 20 --max_steps 10 --hidden1 100 --arg_int 2

其效果等同于

python test.py --learning_rate=20 --max_steps=10 --hidden1=100 --arg_int=2

输出:

20.0
10
100

['--arg_int', '2']

flags为namespace空间,结果是Namespace(hidden1=100, learning_rate=20.0, max_steps=10),包含程序定义了的命令行参数,而unparsed为程序没有定义的命令行参数。

以上这篇Python ArgumentParse的subparser用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
解析Python中的变量、引用、拷贝和作用域的问题
Apr 07 Python
python读取oracle函数返回值
Jul 18 Python
Python实现随机选择元素功能
Sep 14 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
python 寻找list中最大元素对应的索引方法
Jun 28 Python
Python Pandas数据结构简单介绍
Jul 03 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
Python求正态分布曲线下面积实例
Nov 20 Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 Python
python中tab键是什么意思
Jun 18 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
Jan 29 Python
python 如何用terminal输入参数
May 25 Python
python列表的逆序遍历实现
Apr 20 #Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 #Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 #Python
python 错误处理 assert详解
Apr 20 #Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 #Python
在ipython notebook中使用argparse方式
Apr 20 #Python
Python绘制全球疫情变化地图的实例代码
Apr 20 #Python
You might like
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
使用jsonp完美解决跨域问题
2014/11/27 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
Vue header组件开发详解
2018/01/26 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
Python操作json数据的一个简单例子
2014/04/17 Python
python中的函数用法入门教程
2014/09/02 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
django从后台返回html代码的实例
2020/03/11 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
python 串行执行和并行执行实例
2020/04/30 Python
python 字符串格式化的示例
2020/09/21 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
国培教师自我鉴定
2014/02/12 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS