确定我们是否在 IPython 笔记本会话中
Determine if we're in an IPython notebook session
我希望我的函数在从 IPython 笔记本调用时做一件事,在从控制台或库代码调用时做另一件事。特别是我正在制作一个具有以下所需行为的进度条:
- 笔记本:立即return一个小部件
- 控制台:阻止信息并将信息转储到
sys.stdout
有什么地方可以检查以确定用户是从笔记本还是其他地方调用我的函数的标志吗?
您无法检测到前端 是一个非常精确的笔记本,因为 IPython 内核可以有一个或多个具有不同功能的不同 Jupyter 前端(终端控制台、qtconsole、notebook 等)。但是,您可以确定它是内核而不是普通终端 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
由于笔记本比其他前端更受欢迎,这表明前端可能是笔记本,但不是决定性的。所以你想确保更原始的前端有出路。
我希望我的函数在从 IPython 笔记本调用时做一件事,在从控制台或库代码调用时做另一件事。特别是我正在制作一个具有以下所需行为的进度条:
- 笔记本:立即return一个小部件
- 控制台:阻止信息并将信息转储到
sys.stdout
有什么地方可以检查以确定用户是从笔记本还是其他地方调用我的函数的标志吗?
您无法检测到前端 是一个非常精确的笔记本,因为 IPython 内核可以有一个或多个具有不同功能的不同 Jupyter 前端(终端控制台、qtconsole、notebook 等)。但是,您可以确定它是内核而不是普通终端 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
由于笔记本比其他前端更受欢迎,这表明前端可能是笔记本,但不是决定性的。所以你想确保更原始的前端有出路。