这与我使用wx.TextCtrl(或底层GTK +)发布的另一个多线程问题有关,在通过从主线程调用GUI交互进行更正后,我发现它再次涉及到管道块缓冲问题。那么如何从subprocess.stdout获得自发输出呢?
简而言之,当前我正在使用subprocess.popen启动外部长期运行的程序。
launchcmd=["EXTERNAL_PROGRAM_EXE"]
p = subprocess.Popen(launchcmd, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
self.outputThread = BashProcessThread(p.stdout.readline)
self.outputThread.start()
# wx.TextCtrl is used to make input/output
self.textctrl = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER|wx.TE_MULTILINE)
我使用一个单独的线程读取后台程序的标准输出,并使用" wx.CallAfter"进行回调。
class BashProcessThread(threading.Thread):
def __init__(self, readlineFunc, textctrl):
threading.Thread.__init__(self)
self.readlineFunc = readlineFunc
def run(self):
while True:
line = self