在matplotlib show()命令之后,Emacs Python-inferior shell没有显示提示

时间:2012-02-01 19:17:23

标签: python emacs matplotlib

所以我一直在尝试使用numpy和matplotlib,并且在从emacs劣质shell运行python时遇到了一些错误。

当我将py文件发送到shell解释器时,我可以在执行代码后运行命令。命令提示符“>>>”看起来很好。但是,在我在一个绘图上调用matplotlib show命令之后,shell只是挂起而没有显示命令提示符。

>>> plt.plot(x,u_k[1,:]);
[<matplotlib.lines.Line2D object at 0x0000000004A9A358>]
>>> plt.show();

我正在运行传统的C-python实现。在emacs 23.3下使用Fabian Gallina的Python python.el v。0.23.1在Win7上。

在i-python平台下提出了类似的问题:running matplotlib or enthought.mayavi.mlab from a py-shell inside emacs on windows

更新:我在Win 7 x64的新安装上重复了这个问题,python网站提供了典型的python 2.7.2二进制文件,在emacs 23.3和23.4上有numpy 1.6.1和matplotlib 1.1.0适用于Windows。

emacs shell中必定存在错误。

5 个答案:

答案 0 :(得分:1)

我认为有两种方法可以做到。

  1. 使用ipython。然后,您可以使用-pylab选项。 我不使用Fabian Gallina的python.el,但我想你需要这样的东西:

    (setq python-shell-interpreter-args "-pylab")
    

    请阅读python.el的文档。

  2. 您可以按ion

    手动激活互动模式
    >>> from matplotlib import pyplot as plt
    >>> plt.ion()
    >>> plt.plot([1,2,3])
    [<matplotlib.lines.Line2D object at 0x20711d0>]
    >>>
    

答案 1 :(得分:1)

您可以使用其他后端:

matplotlib.use('TkAgg')
import matplotlib.pyplot as plt 

其他GUI后端:

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg

如果您使用的是Elpy,请使用C-u C-c C-c

答案 2 :(得分:0)

我认为这可能与show函数的行为有关:

  

matplotlib.pyplot.show(*args, **kw)

     

使用pylab模式在ipython中运行时,显示所有数字和   返回ipython提示符。

     

在非交互模式下,显示所有数字并阻止直到   数字已经关闭;在交互模式下它除非有效   数字是在从非交互式更改为之前创建的   交互模式(不推荐)。在那种情况下它会显示   数字,但不会阻止。

     

单个实验关键字参数block可以设置为True或   False以覆盖上述阻塞行为。

我认为你遇到了上面提到的阻塞行为会导致shell挂起。也许尝试运行函数:plt.show(block = False)并查看它是否产生您期望的输出。如果这仍然给你带来麻烦,请告诉我,我会尝试在本地重现您的设置。

答案 3 :(得分:0)

我认为我找到了一种更简单的方法来挂起劣质外壳,但只有在调用pdb时才会这样。通过提供'python'作为要运行的程序来启动pdb。

试试这段代码:

print "> {<console>(1)<module>() }"

答案 4 :(得分:0)

经过大量的时间并在matplotlib项目页面和python-mode页面上发布错误后,我发现在ipython.bat中提供参数console --matplotlib将使用matplotlib 1.3.1和ipython 1.2.0

这就是我在iphython.bat中的内容

@ python.exe -i D:\ devel \ Python27 \ Scripts \ ipython-script.py console --matplotlib%*