2014-11-03 6 views
2

Я создал сценарий (plot.py), который изображает фигуру Матплотлиба. Я хотел бы, чтобы сценарий отображал фигуру, а затем сразу же выходил, но оставил фигуру открытой. Я знаю, что могу сделать это, используя амперсанд в окне терминала:Завершить фигуру и выйти, но оставить окно фигуры открытым

$ plot.py & 

, но я хотел бы, чтобы не вводить амперсанд каждый раз, и сделать это разветвление новый процесс вместо этого, я попробовал:

import matplotlib.pyplot as plt 
import numpy as np 
from multiprocessing import Process 
import multiprocessing 

def main(): 
    p = Process(target=showFigure) 
    p.start() 
    p.join() 

def showFigure(): 
    p = multiprocessing.current_process() 
    print ('Starting: {} {}'.format(p.name, p.pid)) 
    x = np.linspace(0, 2 * np.pi, 400) 
    y = np.sin(x) 
    plt.figure() 
    plt.plot(x, y) 
    plt.title('Simple test') 
    plt.show() 

if __name__ == '__main__': 
    main() 

Но это не работает. Я также попытался удалить p.join() и использовать daemon=True ..

+0

Процесс является владельцем объектов GUI, если он выходит, окна должны закрываться. – tacaswell

ответ

3

Вот решение, которое работает на Linux:

import matplotlib.pyplot as plt 
import numpy as np 
import os 

def main(): 
    pid=os.fork() 
    if pid==0: 
     showFigure() 

def showFigure(): 
    x = np.linspace(0, 2 * np.pi, 400) 
    y = np.sin(x) 
    plt.figure() 
    plt.plot(x, y) 
    plt.title('Simple test') 
    plt.show() 

if __name__ == '__main__': 
    main()