在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 相关文章推荐
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
python中强大的format函数实例详解
Dec 05 Python
树莓派实现移动拍照
Jun 22 Python
python随机数分布random均匀分布实例
Nov 27 Python
OpenCV中VideoCapture类的使用详解
Feb 14 Python
如何写python的配置文件
Jun 07 Python
python一些性能分析的技巧
Aug 30 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
python3 kubernetes api的使用示例
Jan 12 Python
python中@contextmanager实例用法
Feb 07 Python
pytorch 把图片数据转化成tensor的操作
Mar 04 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
简单的移动设备检测PHP脚本代码
2011/02/19 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
jQuery参数列表集合
2011/04/06 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
python之消除前缀重命名的方法
2018/10/21 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
哪些是python中web开发框架
2020/06/17 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
亮化工程实施方案
2014/03/17 职场文书
Python爬取某拍短视频
2021/06/11 Python
Django REST framework 限流功能的使用
2021/06/24 Python
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
python模板入门教程之flask Jinja
2022/04/11 Python