OP bertanya tentang mengirim matplotlibplot. Sebagian besar jawaban menganggap eksekusi perintah dari dalam interpreter python. Use-case yang disajikan di sini adalah preferensi saya untuk menguji kode di terminal (misalnya bash) di mana a file.pydijalankan dan Anda ingin plot (s) muncul tetapi skrip python untuk menyelesaikan dan kembali ke prompt perintah.
File yang berdiri sendiri ini digunakan multiprocessinguntuk meluncurkan proses terpisah untuk memplot data matplotlib. Utas utama keluar menggunakan yang os._exit(1)disebutkan dalam posting ini . The os._exit()kekuatan utama untuk keluar tapi daun matplotlibproses anak hidup dan responsif sampai jendela plot ditutup. Ini adalah proses yang terpisah sepenuhnya.
Pendekatan ini sedikit mirip dengan sesi pengembangan Matlab dengan jendela angka yang muncul dengan prompt perintah responsif. Dengan pendekatan ini, Anda telah kehilangan semua kontak dengan proses jendela angka, tetapi, itu tidak masalah untuk pengembangan dan debugging. Tutup saja jendela dan terus pengujian.
multiprocessingdirancang untuk eksekusi kode hanya python yang membuatnya mungkin lebih cocok daripada subprocess. multiprocessingadalah cross-platform sehingga ini harus bekerja dengan baik di Windows atau Mac dengan sedikit atau tanpa penyesuaian. Tidak perlu memeriksa sistem operasi yang mendasarinya. Ini diuji di linux, Ubuntu 18.04LTS.
#!/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
Menjalankan file.pymenampilkan jendela gambar, lalu __main__keluar tetapi jendela multiprocessing+ matplotlibgambar tetap responsif dengan zoom, pan, dan tombol lainnya karena ini adalah proses yang independen.
Periksa proses di bash command prompt dengan:
ps ax|grep -v grep |grep file.py
ion()perbaikan masalah.