2010-03-17 8 views
9

Ich habe ein Python-Skript, das plt.show() als seine letzte Anweisung verwendet. Wenn es ausgeführt wird, hängt IDLE nur nach der letzten Anweisung. Ich bekomme das Bild, aber ich bekomme die Aufforderung nicht zurück.Wie Python-Programmausführung in IDLE zu stoppen

Auf anderen Skripts verwende ich normalerweise ctrl-c, um das Programm zu brechen (manchmal nicht sofort funktioniert), aber wie bekomme ich die Eingabeaufforderung zurück mit der plt.show()? Ctrl-c funktioniert nicht ...

Gibt es andere Möglichkeiten, um das Programm zu stoppen?

Dies ist IDLE unter Windows, wenn es einen Unterschied macht.

+2

einige Optionen hier: http://StackOverflow.com/Questions/1219394/ – bernie

+0

'Ctrl + Pause | Pause'? –

Antwort

4

Ich habe dieses Problem mit IDLE und Matplotlib gesehen, wenn Sie sie unter Windows verwenden. Ich kenne die genaue Ursache nicht, aber Ctrl-c ein paar Mal hat in der Regel für mich gearbeitet. Wenn das für Sie nicht funktioniert, können Sie den normalen Interpreter verwenden, anstatt Ihren Plot direkt in eine Datei anstatt in den Bildschirm zu schreiben.

Dies ist einer dieser (reichlich) Zeiten, wenn IDLE nicht wie eine normale Python-Skript oder Interpreter-Sitzung verhält. Aus diesem Grund vermeide ich normalerweise IDLE.

+0

Was verwenden Sie stattdessen? – greye

+0

Leider sind die Optionen unter Windows nicht großartig. Ich benutze den interaktiven Interpreter direkt (obwohl cmd.exe nicht so nett ist) und rufe Python von gvim auf, um Skripte auszuführen. Eine beliebige Anzahl von Editoren und IDEs kann Python direkt aufrufen, und viele davon sind auf http://wiki.python.org/moin/IntegratedDevelopmentEnvironments aufgelistet. iPython kann unter einigen der gleichen Probleme von IDLE leiden, aber ich vermute, dass es sich aus dem Weg befindet, um Matplotlib funktionieren zu lassen (ich benutze es nie selbst, also kann ich es nicht versprechen). –

2

Wenn Sie plt.show() verwenden, tritt der Python-Subprozess in die Ereignisschleife des GUI-Toolkits ein und blockiert, bis die Ereignisschleife beendet wird. Wenn es beendet wird, erhalten Sie die Eingabeaufforderung zurück.

Wenn Sie das TkAgg-Backend verwenden, müssen Sie Ihre Maus über eine Figur bewegen, nachdem Sie Strg + C gedrückt haben. Dadurch wird die Ereignisschleife angehalten. (Tkinter hat seine Macken)

Alternativ bietet IdleX Matplotlib Unterstützung mit IDLE mit der EventLoop.py Erweiterung. Sie können Abbildungen anzeigen und mit ihnen interagieren, ohne plt.show() zu verwenden. Stellen Sie sicher, dass Sie plt.interactive(True) vor dem Erstellen von Zahlen festlegen.

5

Strg + F6 (Restart Shell)

oder Shell-> Restart Shell

1

Ich hatte dasselbe Problem in Canopy Python-Editor, und ich war in der Lage Python-Sitzung mit CTRL+. ("Punkt" Taste zu unterbrechen). Hoffe, dass hilft, oder sie wahrscheinlich Dinge auf ähnliche Weise tun