【问题标题】:Pyside QProcess Need HelpPyside QProcess 需要帮助
【发布时间】:2011-06-04 04:28:02
【问题描述】:

注意:类 MyWindow(QWidget):

初始化

self.proc = QtCore.QProcess(self)
self.te   = QTextEdit(self)
self.btn  = QPushButton("Execute", self)
self.btn.clicked.connect(self.__event_btn)

现在我有了这个:

def __event_btn(self):
    w_dir = "" # This set to my working directory where my C files are
    args  = ["-o", "MyFile", "MyFile.c"]
    cmd   = "gcc"

    self.proc.setWorkingDirectory(dir)
    self.proc.readyReadStandardOutput.connect(self.__read)
    self.proc.closeWriteChannel()
    self.proc.setReadChannel(QtCore.QProcess.StanfardOutput())
    self.proc.start(cmd, args)

def __read(self):
    self.te.setText(self.proc.readAllStandardOutput)

在进程执行完成之前,上面的代码不会显示任何内容。

现在我的问题是,有什么方法可以捕获 gcc 的输出并在 TextEdit 中显示它们,而不是等待进程完成? (cmd.exe 或终端的方式。它们在程序运行时显示输出)

谢谢

-- 标记

【问题讨论】:

    标签: python pyside qprocess


    【解决方案1】:

    您需要确保程序(在这种情况下为gcc)在标准输出未缓冲的情况下运行。大多数控制台应用程序会缓冲,除非写入控制台(cmd.exe 或终端),因为这样可以提高性能。大概 Qt 用来缓冲QProcess' 输出的内部流不被视为 tty,这就是为什么你得到缓冲并且只看到最后的输出。

    通常可以使 C 程序关闭缓冲 (setvbuf),但大多数不这样做。由于您需要使用 gcc 的东西,它可能会为非 tty 缓冲,因此您必须使用像 unbuffer 这样的实用程序。见this answer

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 2017-10-05
      • 2017-03-23
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多