以编程方式确定用户是否正在从笔记本中调用代码

时间:2013-08-11 19:52:50

标签: matplotlib ipython

我正在编写一些软件来创建模拟数据的matplotlib图。由于这些绘图例程通常在无头环境中运行,因此我选择使用matplotlib面向对象的接口,仅在保存之前将图片显式分配给图形。这意味着我不能在这个问题上使用基于pylab或pyplot的解决方案。

我添加了一些特殊的酱,因此通过在绘图对象上调用display方法或通过调用__repr__来显示内联。但是,我正在做的检查以确定用户是否在IPython下运行(检查"__IPYTHON__" in dir(__builtin__))无法区分用户是在笔记本中还是只是常规终端会话,其中内联数字将无效。< / p>

有没有办法以编程方式检查代码片段是否已在笔记本,qt控制台或终端IPython会话中执行?我在这里做些傻事 - 我没有仔细看过显示语义,所以也许我对IPython内部API的某些部分一无所知,它将为我解决这个问题。

1 个答案:

答案 0 :(得分:1)

多次回答:不,你不能。

How can I check if code is executed in the IPython notebook?

同一个内核可以同时连接到笔记本电脑,qtconsole和终端,甚至可以同时连接多个。

你的问题就像一位电视明星在问“我怎么知道在电视上看我的人是女性的男性?”。它没有感觉。

不要自己调用_repr_*_。尝试导入显示,如果导入失败,请将其设为no-op。 这对python或IPython来说都不够。

更好的返回对象而不是显示。如果对象具有_repr_png_或等价物,则显示挂钩将在IPython中自行工作。