Linuxでは、次の方法でディスプレイを切り離すことができます。
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import os
def detach_display():
mu, sigma = 0, 0.5
x = np.linspace(-3, 3, 100)
plt.plot(x, mlab.normpdf(x, mu, sigma))
plt.show()
if os.fork():
# Parent
pass
else:
# Child
detach_display()
メインプロセスは終了しますが、プロットは残ります。
#2を試みます。これはLinuxでも機能します。あなたはそれを試してみるかもしれません:しかしOSXではそうではありません。
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import os
import multiprocessing as mp
def detach_display():
mu, sigma = 0, 0.5
x = np.linspace(-3, 3, 100)
plt.plot(x, mlab.normpdf(x, mu, sigma))
plt.show()
proc = mp.Process(target=detach_display)
proc.start()
os._exit(0)
がないos._exit(0)
場合、メインプロセスはブロックされます。Ctrl-Cを押すとメインプロセスが終了しますが、プロットは残ります。
を使用するos._exit(0)
と、メインプロセスは終了しますが、プロットは残ります。
はぁ。#3を試みます。matplotlib呼び出しを別のスクリプトに配置する場合は、次のようなサブプロセスを使用できます。
show.py:
import matplotlib.pyplot as plt
import numpy as np
import sys
filename = sys.argv[1]
data = np.load(filename)
plt.plot(data['x'], data['y'])
plt.show()
test.py
import subprocess
import numpy as np
import matplotlib.mlab as mlab
mu, sigma = 0, 0.5
x = np.linspace(-3, 3, 100000)
y = mlab.normpdf(x, mu, sigma)
filename = '/tmp/data.npz'
np.savez(filename, x=x, y=y)
proc = subprocess.Popen(['python', '/path/to/show.py', filename])
実行test.py
すると、プロットが表示され、プロットを表示したまま、制御を端末に戻す必要があります。