Pyside:多个 QProcess 输出到 TextEdit

Posted

技术标签:

【中文标题】Pyside:多个 QProcess 输出到 TextEdit【英文标题】:Pyside: Multiple QProcess output to TextEdit 【发布时间】:2014-12-05 11:10:20 【问题描述】:

我有一个调用可执行文件的 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())

这太笨拙了,因为每次进程发送“就绪”信号时,它都会尝试获取所有进程的输出。

我怎样才能只为发送信号的进程获取输出?

【问题讨论】:

【参考方案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())

【讨论】:

以上是关于Pyside:多个 QProcess 输出到 TextEdit的主要内容,如果未能解决你的问题,请参考以下文章

使用 QProcess 测试 PySide 应用程序

无法使用 pyside Qprocess 启动 exe 文件

PyQt:多个 QProcess 和输出

将 QProcess 输出发送到 textedit 的最佳方法

如何将 QProcess 的输出定向到文件?

使用 QProcess 读取标准输出