我有一些Python代码示例想要分享,如果在终端Python / IPython或IPython笔记本中执行,应该会做一些不同的事情。
如果我的Python代码在IPython笔记本上运行,我如何检查它?
发布于 2013-03-14 22:56:29
问题是你想以不同的方式执行什么。
我们在IPython中尽了最大努力防止内核知道哪种前端是连接的,实际上你甚至可以让一个内核同时连接到许多不同的前端。即使您可以偷看一下stderr/out
的类型以了解您是否在ZMQ内核中,它也不能保证您在另一端拥有什么。你甚至可以完全没有前额。
你可能应该以独立于前端的方式编写你的代码,但是如果你想显示不同的东西,你可以使用rich display system (link pinned to version 4.x of IPython)根据前端来显示不同的东西,但是前端会选择,而不是库。
发布于 2016-09-23 21:43:36
下面的方法满足了我的需求:
get_ipython().__class__.__name__
它在终端IPython上返回'TerminalInteractiveShell'
,在Jupyter (笔记本和qtconsole)上返回'ZMQInteractiveShell'
,在常规Python解释器上失败(NameError
)。在启动IPython时,默认情况下,全局名称空间中似乎提供了get_python()
方法。
将其封装在一个简单的函数中:
def isnotebook():
try:
shell = get_ipython().__class__.__name__
if shell == 'ZMQInteractiveShell':
return True # Jupyter notebook or qtconsole
elif shell == 'TerminalInteractiveShell':
return False # Terminal running IPython
else:
return False # Other type (?)
except NameError:
return False # Probably standard Python interpreter
在macOS 10.12和Ubuntu14.04.4LTS上使用Python3.5.2、Jupyter5.1.0和Jupyter4.2.1进行了测试
发布于 2014-07-24 23:04:57
要检查你是否在笔记本中,这可能很重要,例如在确定使用哪种进度条时,这对我很有效:
def in_ipynb():
try:
cfg = get_ipython().config
if cfg['IPKernelApp']['parent_appname'] == 'ipython-notebook':
return True
else:
return False
except NameError:
return False
https://stackoverflow.com/questions/15411967
复制相似问题