Meine Frage ist einfach: Ich habe ein Python-Skript, das mit matplotlib Zahlen generiert. Jedes Mal, wenn ich es starte, werden neue Fenster mit Zahlen generiert. Wie kann ich das Skript Fenster schließen lassen, die beim letzten Ausführen geöffnet wurden?
Der analoge Befehl in matlab besteht darin, 'close all' am Anfang Ihres matlab-Skripts zu setzen.
Ich habe mehrere Vorschläge gesehen, um so etwas zu tun
import matplotlib.pyplot as plt
plt.close("all")
Diese Lösung funktioniert, wenn Sie Ihr Skript über die Python-Shell ausführen, z
>>>> execfile("myScript.py")
Ich habe jedoch festgestellt, dass dies nicht funktioniert, wenn ich das Skript mit Eclipse / PyDev ausführe. Wie kann ich es in Eclipse zum Laufen bringen?
Beispiel:
from numpy import *
from matplotlib.pyplot import *
from scipy import *
close("all")
#close any previously open plots - this doesn't work when running via Eclipse
t = linspace(0, 0.1,1000)
w = 60*2*pi
figure()
plot(t,cos(w*t))
plot(t,cos(w*t-2*pi/3))
plot(t,cos(w*t-4*pi/3))
show()
Dies sollte die idealen Wellenformen für eine schöne 3-Phasen-Stromversorgung darstellen.
quelle
Siehe Bi Ricos Antwort für den allgemeinen Fall Eclipse.
Für jeden - wie mich - der hier landet, weil Sie viele Fenster haben und Schwierigkeiten haben, alle zu schließen, kann es abhängig von Ihren Umständen effektiv sein, nur Python zu töten. Es funktioniert wahrscheinlich unter fast allen Umständen - auch mit Eclipse.
Ich habe gerade 60 Plots von Emacs erzeugt (ich bevorzuge das Eclipse) und dann dachte ich, mein Skript wäre beendet worden. Das Ausführen
close('all')
in meinem Ipython-Fenster funktionierte bei mir nicht, da die Plots nicht von Ipython stammten. Daher suchte ich nach laufenden Python-Prozessen.Als ich den Interpreter tötete, der das Skript ausführte, waren alle 60 Handlungen geschlossen - z.
$ ps aux | grep python rsage 11665 0.1 0.6 649904 109692 ? SNl 10:54 0:03 /usr/bin/python3 /usr/bin/update-manager --no-update --no-focus-on-map rsage 12111 0.9 0.5 390956 88212 pts/30 Sl+ 11:08 0:17 /usr/bin/python /usr/bin/ipython -pylab rsage 12410 31.8 2.4 576640 406304 pts/33 Sl+ 11:38 0:06 python3 ../plot_motor_data.py rsage 12431 0.0 0.0 8860 648 pts/32 S+ 11:38 0:00 grep python $ kill 12410
Beachten Sie, dass ich weder mein Ipython / Pylab noch den Update-Manager beendet habe (das Beenden des Update-Managers ist wahrscheinlich eine schlechte Idee) ...
quelle
Es werden nicht nur alle Plotfenster, sondern alle Prozesse mit dem Namen python3 beendet, mit Ausnahme des aktuellen Skripts, das Sie ausführen. Es funktioniert für Python3. Wenn Sie also ein anderes Python3-Skript ausführen, wird es beendet. Da ich nur ein Skript gleichzeitig ausführe, erledigt es den Job für mich.
import os import subprocess subprocess.call(["bash","-c",'pyIDs=($(pgrep python3));for x in "${pyIDs[@]}"; do if [ "$x" -ne '+str(os.getpid())+' ];then kill -9 "$x"; fi done'])
quelle
In meinem Fall funktioniert mit den obigen Skripten nichts, aber ich konnte diese Zahlen über die Eclipse-Konsolenleiste schließen, indem ich auf ALLE beenden (Symbol mit zwei roten verschachtelten Quadraten) klickte.
quelle