【发布时间】:2015-12-04 15:25:06
【问题描述】:
如果我的函数是从 IPython 笔记本调用的,我希望它做一件事,如果它是从控制台或库代码调用的另一件事。特别是我正在制作一个具有所需以下行为的进度条:
- 笔记本:立即返回一个小部件
-
控制台:阻止并将信息转储到
sys.stdout
是否有一个标志我可以检查以确定用户是否从笔记本或其他地方调用了我的函数?
【问题讨论】:
-
this question 的第二个答案是否符合您的目的?
如果我的函数是从 IPython 笔记本调用的,我希望它做一件事,如果它是从控制台或库代码调用的另一件事。特别是我正在制作一个具有所需以下行为的进度条:
sys.stdout
是否有一个标志我可以检查以确定用户是否从笔记本或其他地方调用了我的函数?
【问题讨论】:
您无法以完美的精度检测到前端是笔记本,因为 IPython 内核可以拥有一个或多个具有不同功能的不同 Jupyter 前端(终端控制台、qtconsole、笔记本等)。 )。但是,您可以确定它是内核而不是普通终端 IPython:
import sys
def is_kernel():
if 'IPython' not in sys.modules:
# IPython hasn't been imported, definitely not
return False
from IPython import get_ipython
# check for `kernel` attribute on the IPython instance
return getattr(get_ipython(), 'kernel', None) is not None
由于 notebook 比其他前端更受欢迎,这表明前端可能是一个 notebook,但不是决定性的。所以你要确保更原始的前端有出路。
【讨论】: