在ipython notebook中使用argparse方式


Posted in Python onApril 20, 2020

ipython notebook经常被我用作debug的工具。今天调试一段代码,里面用到了argparse这个包来解析命令行参数。但是在ipython notebook里,命令行参数与实际执行的时候是完全不同的,因此代码没办法直接跑起来。

首先查看parse_args()函数的文档,发现函数接口长这样:ArgumentParser.parse_args(args=None, namespace=None)。这个args要求什么类型并没有说,不过文档最后有一句:“默认情况下,参数字符串取自于sys.argv,并创建一个空的Namespace对象用于保存属性”。那就好办了,只要args长得跟sys.argv一样就行。

如果在ipython notebook里,sys.argv可能是这样的:

['/home/user/venv/lib/python2.7/site-packages/ipykernel/__main__.py','-f','/run/user/1000/jupyter/kernel-7b35f85c-27c9-44db-bcf7-e46edb18ee81.json']

这是一个字符串组成的列表,每个字符串显然来源于命令行参数,用空格分开。那么我们只要稍微改动一下代码,给parse_args()输入一个列表即可。假设运行时的命令行参数是python train.py --gpus 0 --lr 0.1,那么传入的列表就是['--gpus', '0', '--lr', '0.1']

补充知识:jupyter notebook:使用argparse包存在的问题及解决

argparse模块

argparse是python用于解析命令行参数和选项的标准模块

导入argparse包

import argparse

遇到的问题

parser = argparse.ArgumentParser()
parser.parse_args()

usage: __main__.py [-h]
__main__.py: error: unrecognized arguments: -f /run/user/1006/jupyter/kernel-ce6cfb61-acb9-40bf-a59b-ff6e1c1eacae.json

An exception has occurred, use %tb to see the full traceback.

SystemExit: 2

问题分析

由于在jupyter notebook中,args不为空,可以查看系统环境变量,大概是下面形式

import sys
sys.argv

['/home/liu/anaconda2/lib/python2.7/site-packages/ipykernel/__main__.py',
'-f',
'/run/user/1006/jupyter/kernel-ce6cfb61-acb9-40bf-a59b-ff6e1c1eacae.json']

可以看出,错误中的-f /…来自这里,可以查看parse_args()函数源码

以及和其调用的函数parse_known_args()源码

虽然args默认参数为None,但是实质为args = _sys.argv[1:]

所以在jupyter中,可以查看自己需要的系统环境变量,然后以list的数据形式传参给args则可以了

parser.parse_args??
parser.parse_known_args??

Signature: parser.parse_args(args=None, namespace=None)
Source: 
 def parse_args(self, args=None, namespace=None):
 args, argv = self.parse_known_args(args, namespace)
 if argv:
  msg = _('unrecognized arguments: %s')
  self.error(msg % ' '.join(argv))
 return args
File: /home/liu/anaconda2/lib/python2.7/argparse.py
Type: instancemethod

Signature: parser.parse_known_args(args=None, namespace=None)
Source: 
 def parse_known_args(self, args=None, namespace=None):
 if args is None:
  # args default to the system args
  args = _sys.argv[1:]
 else:
  # make sure that args are mutable
  args = list(args)

 # default Namespace built from parser defaults
 if namespace is None:
  namespace = Namespace()

 # add any action defaults that aren't present
 for action in self._actions:
  if action.dest is not SUPPRESS:
  if not hasattr(namespace, action.dest):
   if action.default is not SUPPRESS:
   setattr(namespace, action.dest, action.default)

 # add any parser defaults that aren't present
 for dest in self._defaults:
  if not hasattr(namespace, dest):
  setattr(namespace, dest, self._defaults[dest])

 # parse the arguments and exit if there are any errors
 try:
  namespace, args = self._parse_known_args(args, namespace)
  if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
  args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
  delattr(namespace, _UNRECOGNIZED_ARGS_ATTR)
  return namespace, args
 except ArgumentError:
  err = _sys.exc_info()[1]
  self.error(str(err))
File: /home/liu/anaconda2/lib/python2.7/argparse.py
Type: instancemethod

问题解决

parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args(args=[])
print(args)

Namespace(verbosity=None)

argparse参考文档

以上这篇在ipython notebook中使用argparse方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python利用beautifulSoup实现爬虫
Sep 29 Python
详解Python迭代和迭代器
Mar 28 Python
Python使用自带的ConfigParser模块读写ini配置文件
Jun 26 Python
python字典键值对的添加和遍历方法
Sep 11 Python
python中logging库的使用总结
Oct 18 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
python对象与json相互转换的方法
May 07 Python
Django实现跨域请求过程详解
Jul 25 Python
浅谈pycharm使用及设置方法
Sep 09 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 #Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 #Python
python实现小程序推送页面收录脚本
Apr 20 #Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 #Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 #Python
使用IPython或Spyder将省略号表示的内容完整输出
Apr 20 #Python
解决Python spyder显示不全df列和行的问题
Apr 20 #Python
You might like
PHP两种快速排序算法实例
2015/02/15 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
php7性能提升的原因详解
2019/10/13 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
js Dialog 实践分享
2012/10/22 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
JS实现吸顶特效
2020/01/08 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
Python3实现的旋转矩阵图像算法示例
2019/04/03 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
毕业生自荐书
2013/12/18 职场文书
八一演出活动方案
2014/02/03 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
2014年加油站工作总结
2014/12/04 职场文书
商超业务员岗位职责
2015/02/13 职场文书
父亲去世追悼词
2015/06/23 职场文书
在人间读书笔记
2015/06/30 职场文书
护理培训心得体会
2016/01/22 职场文书