Cómo redirigir una salida de la consola Python a un QTextBox

Estoy trabajando en el desarrollo de una GUI para la comstackción del kernel de Linux. Para esto necesito implementar 4-5 comandos de Linux desde Python. Yo uso Qt como diseñador GUI. He implementado exitosamente los comandos usando la llamada os.system() . Pero la salida se obtiene en la consola. El problema real es que la salida del comando es un listado que toma casi 20-25 minutos de impresión continua. Cómo podemos transferir esta salida de consola a un cuadro de texto diseñado en Qt. ¿Puede alguien ayudarme a implementar la operación setSource() en Qt usando source como las salidas de la consola en vivo?

 self.process = QProcess() self.connect(self.process, SIGNAL("readyReadStdout()"), self.readOutput) self.connect(self.process, SIGNAL("readyReadStderr()"), self.readErrors) tarsourcepath="sudo tar xvpf "+ self.path1 self.process.setArguments(QStringList.split(" ",tarsourcepath)) self.process.start() def readOutput(self): self.textBrowser2.append(QString(self.process.readStdout())) if self.process.isRunning()==False: self.textBrowser2.append("\n Completed Successfully") def readErrors(self): self.textBrowser2.append("error: " + QString(self.process.readLineStderr())) 

Esto hizo el trabajo bastante bueno para mí. gracias a todos.

Principalmente trato con wxPython, pero es http://diotavelli.net/PyQtWiki/Capturing_Output_from_a_Process una solución que funcionaría?

Desde la página:

Problema: desea ejecutar un proceso que imprima mucha información en la consola y muestre la salida en un editor de texto o navegador, pero el resultado es una GUI que se congela hasta que finaliza el proceso.

Solución (una de las muchas posibles): cree un objeto QProcess, conecte sus señales a algunas ranuras de su clase, pásele los argumentos necesarios y comience. Los datos del stdout y del stderr del proceso se entregan a sus ranuras.

continuado…

Usar una pipa viene a la mente. Podría usar un hilo de fondo que lea la salida del progtwig (y envíe eventos a la GUI cada vez que se agregue una nueva línea).

Así que la idea básica es esta:

 os.chdir("/usr/src/linux-2.6.34") p = os.popen("make", "r") try: while True: line = p.readline() if not line: break # Replace this with a GUI update event (don't know anything about Qt, sorry) print line finally: # Cf. http://docs.python.org/library/os.html#os.popen programReturnValue = p.close() or 0