Pyside: вывод нескольких QProcess в TextEdit

У меня есть приложение pyside, которое вызывает исполняемый файл. Я хочу запустить этот исполняемый файл асинхронно в n процессах и зафиксировать вывод каждого процесса в QTextEdit.

На данный момент у меня есть:

def run(self, args, worklist):        

    self.viewer = OutputDialog(self)

    self.procs = []
    for path in worklist:
        final_args = args + path

        p = QtCore.QProcess(self)
        p.readyReadStandardOutput.connect(self.write_process_output)
        self.procs.append(p)
        p.start(self.exe, final_args)

def write_process_output(self):
    for p in self.procs:
        self.viewer.text_edit.append(p.readAllStandardOutput())

Это слишком неуклюже, поскольку каждый раз, когда процесс отправляет сигнал «готово», он пытается получить результат для ВСЕХ процессов.

Как я могу получить результат только для процесса, отправившего сигнал?


person jramm    schedule 05.12.2014    source источник


Ответы (1)


Подключите сигнал с помощью lambda, чтобы соответствующий процесс был передан в слот:

        p.readyReadStandardOutput.connect(
            lambda process=p: self.write_process_output(process))


    def write_process_output(self, process):
        self.viewer.text_edit.append(process.readAllStandardOutput())
person ekhumoro    schedule 05.12.2014