Страницы

Поиск по вопросам

суббота, 9 марта 2019 г.

QProcess - как получить вывод процесса до его завершения?

Есть приложение на Qt, включающее код такого вида :
QProcess proc; ... proc.setProgramm("Python34\\python"); proc.setArguments(QStringList{"hello.py"}); proc.setProcessChannelMode(QProcess::MergedChannels); connect(&proc, &QProcess::readyReadStandardOutput, []() { QString output = QString(proc.readAllStandardOutput()); ... }); proc.start();
Но readyReadStandardOutput отлавливается только после завершения процесса. В моём случае - требуется проделать определённые действия до завершения (по наличию в выводе определённого текста).
Как это реализовать?
upd. Более подробный код имеет вид :
class Window: public QMainWindow { ... private: QVector processes; void createProcesses(); void prepareProcess(QProcess* proc); }
void MainWindow::createProcesses() { for(int i=0;...) { processes.append(new QProcess()); prepareProcess(&processes[processes.size()-1]); } }
void MainWindow::prepareProcess(QProcess* proc) { proc->setProgramm("Python34\\python"); proc->setArguments(QStringList{"hello.py"}); proc->setProcessChannelMode(QProcess::MergedChannels); connect(&proc, &QProcess::readyReadStandardOutput, []() { QString output = QString(proc->readAllStandardOutput()); ... }); proc->start(); }
UPD. А в Qt ли вообще дело? Обнаружил следующее. При запуске, например ping /t ya.ru результат выводится. Но, с применением например, следующего питоноскрипта - нет
import time while True: print("Hello") time.sleep(1)


Ответ

Дело было не в приложении на Qt, а в буферизации вывода python-ом (https://stackoverflow.com/questions/230751/how-to-flush-output-of-python-print)
Лечится запуском с опцией -u

Комментариев нет:

Отправить комментарий