首先,爲什麼你想subprocess
另一個Python腳本時,你可以進口嗎?
無論如何,你的問題的事實,任何call
,wait
和communicate
等待subprocess
如果timeout
參數的終止中省略莖。由於這個tkinter
應用程序無法自行刷新,因此代碼流無法訪問mainloop
。
如果你有一些複雜的想法 - 看看threading
,multiprocessing
和this的話題。
如果你只想終止主處理時,子進程結束 - 在thoose片段看一看:
test.py:
import time
time.sleep(5)
爲主。潘岳:
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
import subprocess
class App(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.button = tk.Button(self, text='Start', command=self.start_test_process)
self.button.pack()
self.process = None
def continuous_check(self):
status = self.process.poll()
if status is None:
print('busy')
self.after(500, self.continuous_check)
elif status == 0:
print('successfully finished')
self.destroy()
else:
print('something went wrong')
def start_test_process(self):
self.process = subprocess.Popen('python test.py')
self.continuous_check()
app = App()
app.mainloop()
主要思想在這裏保持mainloop
可達用的poll
和after
方法的組合代碼。