Pyside QProcess нужна помощь

1

ПРИМЕЧАНИЕ: класс MyWindow (QWidget):

В init

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 или teminal.Они показывают результат при запуске программы)

Спасибо

- Марк

Теги:
pyside
qprocess

1 ответ

3
Лучший ответ

Вам нужно убедиться, что программа (gcc в этом случае) работает с небуферизованным stdout. Большинство буферов консольных приложений не записываются на консоль (cmd.exe или терминал), поскольку это повышает производительность. Предположительно, внутренние потоки, используемые Qt для буферизации вывода QProcess ', не рассматриваются как ttys, поэтому вы получаете буферизацию и видите только результат в конце.

Обычно программы C могут быть отключены (setvbuf), но большинство из них этого не делают. Поскольку вам нужны вещи для работы с gcc, которые предположительно буферизируются для non- ttys, вам придется использовать утилиту вроде unbuffer. См. этот ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню