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 相关文章推荐
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 Python
整理Python 常用string函数(收藏)
May 30 Python
ansible作为python模块库使用的方法实例
Jan 17 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
Python实现的简单计算器功能详解
Aug 25 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
基于Python测试程序是否有错误
May 16 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 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
一个简单实现多条件查询的例子
2006/10/09 PHP
PHP集成FCK的函数代码
2008/09/27 PHP
php搜索文件程序分享
2015/10/30 PHP
PHP中each与list用法分析
2016/01/08 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
python 命令行传入参数实现解析
2019/08/30 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
班组长工作职责
2013/12/25 职场文书
房屋维修协议书范本
2014/09/25 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android
V Rising 服务器搭建图文教程
2022/06/16 Servers