1

注意:类 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 或终端的方式。它们在程序运行时显示输出)

谢谢

- 标记

4

1 回答 1

3

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

通常可以使 C 程序关闭缓冲 ( setvbuf),但大多数不这样做。由于您需要gcc使用unbuffer. 看到这个答案

于 2011-06-06T18:24:03.220 回答