我正在尝试使用Tkinter编写一个简单的python(3.7)程序,在单击按钮时,它将生成一个进程并终止Python脚本。生成的过程不应该被杀死。以下代码实现了这一点:
from tkinter import *
import subprocess
import time
def execute_command(command):
process = subprocess.Popen(command, stdout = subprocess.PIPE,
stderr = subprocess.STDOUT, shell=True,
universal_newlines = True)
class App:
def __init__(self, master):
self.frame = Frame(master)
self.frame.pack()
self.button_gimp = Button(self.frame, text = "GIMP", command = self.gimp)
self.button_gimp.pack(side = LEFT)
def gimp(self):
execute_command("gimp")
self.frame.quit()
root = Tk()
app = App(root)
root.mainloop()
root.destroy()
time.sleep(5)
但是,如果最后没有sleep(),则进程(在本例中为GIMP)将在打开之前被终止。关于这里发生了什么的任何想法?我知道Popen是异步的,但是一旦它返回,应该保证生成进程,即使python终止,不应该吗?它甚至有自己的PID,可以打印。
更新::
在John Anderson的带领下,我发现了这一点
stdout = subprocess.PIPE
是罪魁祸首。我很欣赏任何有关原因的见解,因为这只是告诉Popen捕获过程的输出。