Domanda

sto lavorando sullo sviluppo di una GUI per la ricompilazione del kernel di Linux. Per questo ho bisogno di attuare 4-5 comandi Linux da Python. Io uso Qt come GUI designer. Ho implementato con successo i comandi mediante chiamata os.system(). Ma l'uscita è ottenuto dalla console. Il vero problema è l'output del comando è un elenco che prende quasi 20-25 minuti stampa continua. Come possiamo trasferire questa uscita della console a una casella di testo progettato in Qt. Può uno aiutarmi per implementare l'operazione setSource() in Qt utilizzando come fonte le uscite della console dal vivo.

È stato utile?

Soluzione

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()))

Questo ha fatto il lavoro abbastanza buono per me. grazie a tutti.

Altri suggerimenti

Io per lo più occupo di wxPython, ma è http://diotavelli.net/PyQtWiki/Capturing_Output_from_a_Process una soluzione che avrebbe funzionato?

Dalla pagina:

  

Problema: che si desidera eseguire un processo   che stampa un sacco di informazioni al   console e visualizzare l'output in un   editor di testo o del browser, ma il risultato   è una GUI che congela fino al   processo è finito.

     

Soluzione (uno dei tanti possibili):   Creare un oggetto QProcess, collegare il suo   segnali ad alcune fessure nella tua classe,   passare gli argomenti richiesti e   avviarlo. I dati sulla stdout del processo   e stderr è consegnato alle tue slot.

     

continua ...

Utilizzando un tubo viene in mente. Si potrebbe utilizzare un thread in background che legge l'output del programma (e invia gli eventi alla GUI ogni volta che viene aggiunta una nuova riga).

Quindi, l'idea di base è questa:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top