ОП спрашивает об отстранении matplotlib
участков. Большинство ответов предполагают выполнение команды из интерпретатора Python. Вариант использования, представленный здесь, является моим предпочтением для тестирования кода в терминале (например, bash), где file.py
запускается a, и вы хотите, чтобы график (ы) появлялся, а скрипт python завершался и возвращался в командную строку.
Этот автономный файл используется multiprocessing
для запуска отдельного процесса отображения данных с помощью matplotlib
. Основной поток выходит с использованием os._exit(1)
упомянутого в этом посте. В os._exit()
силах основные для выхода , но оставляет matplotlib
процесс ребенка живой и отзывчивой , пока окно участка не будет закрыто. Это отдельный процесс полностью.
Этот подход немного похож на сеанс разработки Matlab с графическими окнами, которые предлагают отзывчивую командную строку. При таком подходе вы потеряли все контакты с процессом окна рисунка, но это нормально для разработки и отладки. Просто закройте окно и продолжайте тестирование.
multiprocessing
предназначен для выполнения кода только на Python, что делает его, возможно, лучше, чем subprocess
. multiprocessing
является кроссплатформенным, так что это должно хорошо работать в Windows или Mac без каких-либо настроек. Нет необходимости проверять основную операционную систему. Это было проверено на 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
Запуск file.py
вызывает окно фигуры, затем __main__
выходит, ноmultiprocessing
matplotlib
окно с рисунком + реагирует на кнопки масштабирования, панорамирования и других операций, потому что это независимый процесс.
Проверьте процессы в командной строке bash:
ps ax|grep -v grep |grep file.py
ion()
устраняет проблему.