Я пытаюсь получить то, что записано в stdout в подпроцессе, отображаемом в виджетах Qt.получить stdout подпроцесса, который будет отображаться в виде виджета Qt
Я начала процесса таким образом:
import subprocess
subprocess.call(["program_name", "arguments"])
Я думаю, что я должен сделать класс действовать как стандартный вывод, и указать его, когда я называю подпроцесс, я попытался это:
class Log:
def __init__(self, qtWidget):
self.qtWidget = qtWidget
def write(self, data):
self.qtWidget.append(data)
# (...)
log = Log(theWidget)
sub.process.call(["program_name", "arguments"], stdout=log)
, но я получаю сообщение об ошибке сказав: AttributeError: объект «Журнал» не имеет атрибута «fileno»
не могу думать о каких-либо других идей, кроме перенаправления в файл, а затем Хавин г таймер, который считывает с него время от времени ..
[править]
Законченное с этим:
process = QProcess()
process.setProcessChannelMode(QProcess.MergedChannels)
process.start("program_name", [ "arguments" ])
process.readyReadStandardOutput.connect(aFunction)
# then in the function...
outputBytes = process.readAll().data()
outputUnicode = outputBytes.decode('utf-8')
messageWidget.append(outputUnicode)
спасибо за помощь!
Я закончил с использованием QProcess и прослушивал сигнал readyReadStandardOutput. Это хорошо работает, спасибо! – drk