Das OP fragt nach dem Entpacken von matplotlib
Parzellen. Die meisten Antworten setzen die Befehlsausführung in einem Python-Interpreter voraus. Der hier vorgestellte Anwendungsfall ist meine Präferenz für das Testen von Code in einem Terminal (z. B. Bash), in dem a ausgeführt file.py
wird, und Sie möchten, dass die Handlung (en) angezeigt werden, das Python-Skript jedoch abgeschlossen wird und zu einer Eingabeaufforderung zurückkehrt.
Diese eigenständige Datei wird verwendet multiprocessing
, um einen separaten Prozess zum Plotten von Daten mit zu starten matplotlib
. Der Haupt-Thread wird mit dem os._exit(1)
in diesem Beitrag erwähnten beendet . Die os._exit()
Hauptkräfte verlassen das System, lassen den matplotlib
untergeordneten Prozess jedoch lebendig und reagieren, bis das Plotfenster geschlossen wird. Es ist ein völlig separater Prozess.
Dieser Ansatz ähnelt einer Matlab-Entwicklungssitzung mit Figurenfenstern, die eine reaktionsschnelle Eingabeaufforderung enthalten. Mit diesem Ansatz haben Sie jeglichen Kontakt zum Prozess des Figurenfensters verloren, aber das ist für die Entwicklung und das Debuggen in Ordnung. Schließen Sie einfach das Fenster und testen Sie weiter.
multiprocessing
ist für die reine Python-Codeausführung konzipiert, wodurch es möglicherweise besser geeignet ist als subprocess
. multiprocessing
ist plattformübergreifend, daher sollte dies unter Windows oder Mac mit geringen oder keinen Anpassungen gut funktionieren. Das zugrunde liegende Betriebssystem muss nicht überprüft werden. Dies wurde unter Linux Ubuntu 18.04LTS getestet.
#!/usr/bin/python3
import time
import multiprocessing
import os
def plot_graph(data):
from matplotlib.pyplot import plot, draw, show
print("entered plot_graph()")
plot(data)
show() # this will block and remain a viable process as long as the figure window is open
print("exiting plot_graph() process")
if __name__ == "__main__":
print("starting __main__")
multiprocessing.Process(target=plot_graph, args=([1, 2, 3],)).start()
time.sleep(5)
print("exiting main")
os._exit(0) # this exits immediately with no cleanup or buffer flushing
Beim Ausführen file.py
wird ein Figurenfenster geöffnet und dann beendet. __main__
Das multiprocessing
+ matplotlib
Figurenfenster reagiert jedoch weiterhin mit Zoom-, Schwenk- und anderen Schaltflächen, da es sich um einen unabhängigen Vorgang handelt.
Überprüfen Sie die Prozesse an der bash-Eingabeaufforderung mit:
ps ax|grep -v grep |grep file.py
ion()
behebt das Problem.