在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的re模块正则表达式操作
May 25 Python
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
python实现简单日期工具类
Apr 24 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
Python Tkinter模块 GUI 可视化实例
Nov 20 Python
python3.7通过thrift操作hbase的示例代码
Jan 14 Python
python生成大写32位uuid代码
Mar 03 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
python实现梯度下降和逻辑回归
Mar 24 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(3) php 函数
2010/02/15 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
Avalonjs 实现简单购物车功能(实例代码)
2017/02/07 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python九九乘法表的实例
2017/09/26 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
python多线程和多进程关系详解
2020/12/14 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
老师自我鉴定范文
2013/12/25 职场文书
高中运动会广播稿
2014/01/21 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
家长学校教学计划
2015/01/19 职场文书
客房领班岗位职责
2015/02/11 职场文书
员工表扬信怎么写
2015/05/05 职场文书
公司年会开场白
2015/06/01 职场文书