
Ich hab ein kleines Problem mit QProcess und zwar würde ich gerne den Output von z.B. "mkfs.ext3 -c /dev/sda1" in nem QTextEdit Widget anzeigen lassen, was auch funktioniert nur eben nicht korrekt!
Zwar wird ein Teil der Ausgabe im Widget angezeigt aber nur stdout und da mkfs.ext3 in stdout und stderr schreibt sieht man die hälfte nicht... z.B. die Prozentanzeige beim Badblocks check.
Obwohl ich self.process.ProcessChannelMode(QtCore.QProcess.MergedChannels) gesetzt habe seh ich stdout und stderror getrennt?
Muss ich stdout und stderr echt von Hand auslesen und mixen? oO
Dies hier seh ich im QTextEdit Widget (stdout):
Code: Alles auswählen
Stride=0 blocks, Stripe width=0 blocks
640848 Inodes, 2560000 Blöcke
128000 Blöcke (5.00%) reserviert für den Superuser
Erster Datenblock=0
Maximale Dateisystem-Blöcke=2621440000
79 Blockgruppen
32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe
8112 Inodes pro Gruppe
Superblock-Sicherungskopien gespeichert in den Blöcken:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Code: Alles auswählen
[PyQt4.QtCore.QByteArray(' 18.98% done, 0:29 elapsed\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08')]
[PyQt4.QtCore.QByteArray(' 19.64% done, 0:30 elapsed\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08')]
[PyQt4.QtCore.QByteArray(' 20.29% done, 0:31 elapsed\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08')]
[PyQt4.QtCore.QByteArray(' 20.89% done, 0:32 elapsed\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08')]
[PyQt4.QtCore.QByteArray(' 21.53% done, 0:33 elapsed\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08')]
Code: Alles auswählen
from PyQt4 import QtGui, QtCore, Qt
import sys
class console(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
self.setWindowTitle('Console Output')
self.process = QtCore.QProcess()
self.process.ProcessChannelMode(QtCore.QProcess.MergedChannels)
self.process.start('bash', QtCore.QStringList('-i'))
self.view = QtGui.QTextEdit(self)
self.view.setReadOnly(True)
self.cmd = QtGui.QLineEdit(self)
layout = QtGui.QGridLayout(self)
layout.addWidget(self.view, 0,0,1,1)
layout.addWidget(self.cmd, 1,0,1,1)
self.connect(self.cmd, QtCore.SIGNAL('returnPressed()'), self.execute)
self.connect(self.process, QtCore.SIGNAL('readyReadStandardOutput()'), self.output)
self.connect(self.process, QtCore.SIGNAL('readyReadStandardError()'), self.error)
def execute(self):
self.process.write(str(self.cmd.text())+'\n')
self.cmd.setText('')
def output(self):
self.view.clear()
bytes = self.process.readAllStandardOutput()
byte_list = bytes.split('\n')
for i in range(len(byte_list)):
self.view.append(QtCore.QString(byte_list[i]))
def error(self):
bytes = self.process.readAllStandardError()
byte_list = bytes.split('\n')
print byte_list
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
cons= console()
cons.show()
sys.exit(app.exec_())