在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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
Python日志模块logging简介
Apr 13 Python
Python的Django框架中自定义模版标签的示例
Jul 20 Python
Python 实现简单的电话本功能
Aug 09 Python
Python内置模块logging用法实例分析
Feb 12 Python
Python实现ping指定IP的示例
Jun 04 Python
python中map的基本用法示例
Sep 10 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
Python中psutil的介绍与用法
May 02 Python
python openpyxl使用方法详解
Jul 18 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
Jun 04 Python
Python初识逻辑与if语句及用法大全
Aug 07 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 for 循环语句使用方法详细说明
2010/05/09 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
jquery动态添加option示例
2013/12/30 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
python中使用mysql数据库详细介绍
2015/03/27 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
python字符串格式化方式解析
2019/10/19 Python
python tkinter canvas使用实例
2019/11/04 Python
Python 中@property的用法详解
2020/01/15 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
关于学习的演讲稿
2014/05/10 职场文书
建筑工地质量标语
2014/06/12 职场文书
男性健康日的活动方案
2014/08/18 职场文书
对照检查剖析材料
2014/09/30 职场文书
企业工会工作总结2015
2015/05/13 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫