OP bertanya tentang mengirim matplotlib
plot. 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.py
dijalankan dan Anda ingin plot (s) muncul tetapi skrip python untuk menyelesaikan dan kembali ke prompt perintah.
File yang berdiri sendiri ini digunakan multiprocessing
untuk 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 matplotlib
proses 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.
multiprocessing
dirancang untuk eksekusi kode hanya python yang membuatnya mungkin lebih cocok daripada subprocess
. multiprocessing
adalah 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.py
menampilkan jendela gambar, lalu __main__
keluar tetapi jendela multiprocessing
+ matplotlib
gambar 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.