11 Stimmen

Emacs Python-interne Shell zeigt nach dem matplotlib show() Befehl keine Eingabeaufforderung an

Also, ich habe mit numpy und matplotlib experimentiert und bin auf einen Fehler gestoßen, wenn ich Python aus der Emacs-Inferior-Shell ausführe.

Wenn ich die py-Datei an den Shell-Interpreter sende, kann ich Befehle nach der Ausführung des Codes ausführen. Das Eingabeaufforderungszeichen ">>>" erscheint einwandfrei. Nachdem ich jedoch einen matplotlib show-Befehl auf einem Plot aufgerufen habe, bleibt die Shell hängen und das Eingabeaufforderungszeichen wird nicht angezeigt.

>>> plt.plot(x,u_k[1,:]);
[]
>>> plt.show();

Ich verwende die traditionelle C-Python-Implementierung unter emacs 23.3 mit Fabian Gallinas Python python.el v. 0.23.1 unter Win7.

Eine ähnliche Frage wurde hier unter der i-python-Plattform gestellt: matplotlib oder enthought.mayavi.mlab aus einer py-shell innerhalb von Emacs unter Windows ausführen

UPDATE: Ich habe das Problem auf einer frischen Installation von Win 7 x64 mit den üblichen Python 2.7.2 Binärdateien von der Python-Website und mit numpy 1.6.1 und matplotlib 1.1.0 auf Emacs 23.3 und 23.4 für Windows dupliziert.

Es muss irgendwo ein Bug in der Emacs-Shell sein.

4voto

tkf Punkte 2960

Ich denke, es gibt zwei Möglichkeiten, es zu tun.

  1. Verwenden Sie ipython. Dann können Sie die Option -pylab verwenden. Ich benutze Fabian Gallinas python.el nicht, aber ich nehme an, Sie werden so etwas brauchen:

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

    Bitte lesen Sie die Dokumentation von python.el.

  2. Sie können den interaktiven Modus manuell aktivieren, indem Sie ion verwenden

    >>> from matplotlib import pyplot as plt
    >>> plt.ion()
    >>> plt.plot([1,2,3])
    []
    >>>

2voto

Mahyar Punkte 11

Sie können verschiedene Back-Ends verwenden:

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

Weitere GUI-Backends:

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg

Wenn Sie Elpy verwenden, führen Sie Ihren Code mit C-u C-c C-c aus

0voto

Devin M Punkte 9535

Ich denke, dass dies möglicherweise etwas mit dem Verhalten der show-Funktion zu tun hat:

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

Wenn es im ipython mit seinem Pylab-Modus läuft, werden alle Abbildungen angezeigt und kehrt zum ipython-Prompt zurück.

Im nicht-interaktiven Modus werden alle Abbildungen angezeigt und blockiert, bis die Abbildungen geschlossen wurden; im interaktiven Modus hat es keine Auswirkungen, es sei denn, die Abbildungen wurden vor einer Änderung vom nicht-interaktiven in den interaktiven Modus erstellt (nicht empfohlen). In diesem Fall werden die Abbildungen angezeigt, blockieren aber nicht.

Ein einzelnes experimentelles Schlüsselwortargument, block, kann auf True oder False gesetzt werden, um das oben beschriebene blockierende Verhalten außer Kraft zu setzen.

Ich denke, du stößt auf das oben erwähnte blockierende Verhalten, was dazu führen würde, dass die Shell hängt. Versuche vielleicht, die Funktion so auszuführen: plt.show(block = False) und sieh, ob sie die erwartete Ausgabe liefert. Wenn du weiterhin Probleme hast, lass es mich wissen und ich werde versuchen, deine Einrichtung lokal nachzubilden.

0voto

Ken Punkte 1

Ich glaube, ich habe einen noch einfacheren Weg gefunden, um das minderwertige Shell aufzuhängen, aber nur wenn pdb aufgerufen wird. Starten Sie pdb, indem Sie 'python' als auszuführendes Programm angeben.

Versuchen Sie diesen Code:

print "> {(1)() }"

0voto

octi Punkte 1430

Nun, nach einer enormen Menge Zeit und dem Posten des Fehlers auf der matplotlib-Projektseite und der python-mode-Seite habe ich herausgefunden, dass das Bereitstellen der Argumente Konsole --matplotlib in ipython.bat den Trick mit matplotlib 1.3.1 und ipython 1.2.0 macht.

Das habe ich in meinem iphython.bat:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X