Ich versuche wx.Process
von der Unterklasse zu trennen, so dass ich einen benutzerdefinierten Prozessstarter habe, der Ereignisse zurück zum Hauptthread mit Daten aus dem Stdout-Stream auslöst. Ist das ein guter Weg, Dinge zu tun?Was ist der beste Weg, um Informationen aus meinem wx.Process zurück zu meinem Haupt-Thread zu propagieren?
class BuildProcess(wx.Process):
def __init__(self, cmd, notify=None):
wx.Process.__init__(self, notify)
print "Constructing a build process"
self.Bind(wx.EVT_IDLE, self.on_idle)
self.Redirect()
self.cmd = cmd
self.pid = None
def start(self):
print "Starting the process"
self.pid = wx.Execute(self.cmd, wx.EXEC_ASYNC, self)
print "Started."
def on_idle(self, evt):
print "doing the idle thing..."
stream = self.GetInputStream()
if stream.CanRead():
text = stream.read()
wx.PostEvent(self, BuildEvent(EVT_BUILD_UPDATE, self, data=text))
print text
def OnTerminate(self, *args, **kwargs):
wx.Process.OnTerminate(self, *args, **kwargs)
print "Terminating"
BuildEvent
hier ist eine benutzerdefinierte Unterklasse von wx.PyEvent
. Der Prozess wird ordnungsgemäß gestartet, ausgeführt und beendet, aber meine on_idle
-Funktion wird nie ausgeführt, obwohl ich sicher bin, dass ich sie an das Idle-Ereignis gebunden habe.