from parentfrm01 import *
Primero hemos creado un cuadro de diálogo con un QTextEdit para mostrar la salida y varios botones para lanzar y detener el proceso
class Frm01 ( parentFrm01 ):
Constructor de la ventana:
def __init__(self,parent = None,name = None,fl = 0):
#call parent's constructor
parentFrm01.__init__ (self,parent,name,fl)
Se crea un objeto QProcess y se le conecta a los slots
self.proc = QProcess ( self )
self.connect (self.proc,SIGNAL("readyReadStdout ()"),self.leidofromProcess )
self.connect (self.proc,SIGNAL("readyReadStderr ()"),self.leidofromProcess)
self.connect (self.proc,SIGNAL("processExited ()"),self.procesoTerminado)
Esta función es invocada cada vez que el proceso imprime algo en la consola
def leidofromProcess(self):
self.textEdit1.append ( QString (self.proc.readStdout () ) )
self.textEdit1.append ( QString (self.proc.readStderr () ) )
#Lleva el cursor a la última linea
self.textEdit1.setContentsPos (0,self.textEdit1.contentsHeight() )
Esta función es invocada cuando el proceso termina
def procesoTerminado ( self ) :
#self.textEdit1.setContentsPos (0,0)
self.textEdit1.append ("Terminado")
Lanzamiento del proceso y dos formas de pasarle los argumentos.
def lanzar(self):
a = QStringList ()
a.append ("faad")
a.append ("s9.m4a")
self.proc.setArguments ( a )
#self.proc.addArgument ("faad")
#self.proc.addArgument ("s9.m4a")
if not self.proc.start () :
print "fallo"
Vuelvo a lanzar el proceso, pero ahora con diferentes argumentos
def lanza2 ( self ) :
a = QStringList()
a.append ("ls")
a.append ("/")
a.append ("-l")
self.proc.setArguments ( a )
#self.proc.addArgument ( "ls" )
#self.proc.addArgument ( "/" )
#self.proc.addArgument ( "-l" )
if not self.proc.start () :
print "fallo"
Detención del proceso a petición del usuario. Se solicita que el proceso termine por las buenas. En caso de fallo el proceso se termina por las malas a los 5 segundos.
def parar ( self ) :
print "terminando..."
self.proc.tryTerminate()
QTimer.singleShot(5000, self.proc, SLOT ("kill()") )
1 comentario:
Esto quedaría mejor así)
def leidoFromProcess (self)
..while self.proc.canReadLineStdout():
....self.textEdit1.append ( QString ( self.proc.readLineStdout() ).ascii().decode("utf8") )
..while self.proc.canReadLineStderr():
....self.textEdit1.append ( QString (self.proc.readStderr () ) )
Publicar un comentario