Прослушивание вывода подпроцессаPython

Программы на Python
Ответить
Anonymous
 Прослушивание вывода подпроцесса

Сообщение Anonymous »

Я пытаюсь получить выходные данные подпроцесса, созданного с помощью QProcess PySide6. Однако в документации не указано, когда передается сигнал ReadyRead. Судя по моим тестам, это кажется произвольным, поскольку даже очистка вывода в подпроцессе или отправка строк (заканчивающихся символом новой строки) не работает.
Я хотел бы знать, как детерминированно прочитайте стандартный вывод подпроцесса с помощью PySide6, если это вообще возможно.
Вот минимальный пример кода для родительского процесса:

Код: Выделить всё

import sys

from PySide6.QtCore import QCoreApplication, QProcess, QByteArray

class ProcessExample:
def __init__(self):
self.process = QProcess()
self.process.readyRead.connect(self.handle_stdout)
self.process.readyReadStandardError.connect(self.handle_stderr)
self.process.errorOccurred.connect(self.handle_process_error)
self.process.stateChanged.connect(self.current_process_state)
self.process.finished.connect(self.handle_finished)

def start_process(self):
self.process.start("python", ['test_qprocess_program.py'])
self.process.waitForStarted()

def write_to_process(self, message):
print("No. bytes written: ", self.process.write(message))
self.process.waitForReadyRead()

def handle_stdout(self):
print('u')

def handle_stderr(self):
error_output: QByteArray = self.process.readAllStandardError()
print("Standard Error Output:")
print(error_output)

def current_process_state(self, state):
print(state)

def handle_process_error(self, error):
print('Process error:')
print(error)

def handle_finished(self):
print("End")

app = QCoreApplication(sys.argv)
p = ProcessExample()
p.start_process()
app.exec()
Вот минимальный пример кода для дочернего процесса:

Код: Выделить всё

[print(i**2, flush=True) for i in range(10)]
Я ожидаю, что буква «u» появится десять раз, поскольку стандартный поток вывода очищается десять раз, однако она появляется только один раз.

Подробнее здесь: https://stackoverflow.com/questions/793 ... subprocess
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»