Я думаю, что ваша проблема здесь:
process->waitForFinished(-1);
Вызов waitForFinished()
проблематичен, если ваш дочерний процесс выдает больше, чем небольшое количество вывода, потому что, если stdout
выходной буфер вашего дочернего процесса заполняется, у вас возникла тупиковая ситуация: дочерний / Python-процесс теперь блокируется, ожидая, пока буфер опустошится, чтобы он мог записать в него больше выходных данных;Между тем, ваш процесс Qt / parent также блокируется, ожидая завершения дочернего процесса.
Поскольку ни один из процессов не может ничего сделать, дочерний процесс никогда не завершится, поэтому waitForFinished()
никогда не вернется, и ваша программазастрял навсегда.
(Другая возможность состоит в том, что дочерний процесс настроен так, чтобы просто отбрасывать любой дополнительный выходной текст, когда его буфер stdout
заполняется; в этом случае дочерний процесс завершится, и waitForFinished()
будетreturn, но ваш process->readAll()
вызов вернет только исходный выходной текст, который смог поместиться в выходной буфер, оставшийся текст был отброшен, так что ваш процесс Qt никогда не увидит его)
В любомВ этом случае решение состоит не в том, чтобы ждать внутри waitForFinished()
, а в том, чтобы просто вызвать readAll()
немедленно, чтобы собрать результаты без ожидания.Возможно, вам придется вызывать его в цикле, пока не завершится дочерний процесс, возможно, вместе с waitForReadyRead()
, чтобы избежать циклов занятости.