在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实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
python控制台中实现进度条功能
Nov 10 Python
Python中类型检查的详细介绍
Feb 13 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
python 字典操作提取key,value的方法
Jun 26 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
tensorflow常用函数API介绍
Apr 19 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 中的str_replace 函数总结
2007/04/27 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
Python实现Restful API的例子
2019/08/31 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
教育专业个人求职信
2013/12/02 职场文书
幼儿教师国培感言
2014/02/19 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
出国留学英文自荐信
2015/03/25 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
golang 实现并发求和
2021/05/08 Golang
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
Redis特殊数据类型bitmap位图
2022/06/01 Redis