在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中的from..import绝对导入语句
Jun 21 Python
django之常用命令详解
Jun 30 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
Python实现E-Mail收集插件实例教程
Feb 06 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
python实现用户名密码校验
Mar 18 Python
keras自定义损失函数并且模型加载的写法介绍
Jun 15 Python
浅谈Python中的继承
Jun 19 Python
python requests库的使用
Jan 06 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
IP138 IP地址查询小偷实现代码
2010/02/15 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
小程序实现图片预览裁剪插件
2019/11/22 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
python实现目录树生成示例
2014/03/28 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
解决Django中多条件查询的问题
2019/07/18 Python
django做form表单的数据验证过程详解
2019/07/26 Python
Python中qutip用法示例详解
2020/10/02 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
创联软件面试题笔试题
2012/10/07 面试题
最新的大学生找工作自我评价
2013/09/29 职场文书
计算机应用职专应届生求职信
2013/11/12 职场文书
产品销售员岗位职责
2013/12/18 职场文书
村干部培训班主持词
2014/03/28 职场文书
专家推荐信范文
2015/03/26 职场文书
离婚财产分割协议书
2015/08/11 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery