Как получить STDOUT из QProcess?
Я думал, что получу результат от QProcess, используя следующий код:
// Start the process
process.start(tr("php-cgi www/test.php"),QIODevice::ReadWrite);
// Wait for it to start
if(!process.waitForStarted())
return 0;
// Continue reading the data until EOF reached
QByteArray data;
while(process.waitForReadyRead())
data.append(process.readAll());
// Output the data
qDebug(data.data());
qDebug("Done!");
Я ожидаю увидеть вывод из программы, напечатанный на консоли отладки, но все, что я вижу, это:
готово!
Я знаю, что:
- программа запускается нормально, потому что сообщение в конце печатается.
- программа тут при выводе на печать так же команда в терминале создает длинную строку текста, как и ожидалось.
что я здесь делаю не так?
2 ответов
перед началом процесса вызова:
process.setProcessChannelMode(QProcess::MergedChannels);
это приведет к печати всего (даже вывода STDERR) на вывод STDOUT.
вот некоторые разъяснения:
согласно http://doc.qt.io/qt-5/qprocess.html#ProcessChannelMode-enum,
-
QProcess::MergedChannels
:QProcess
объединяет выходные данные запущенного процесса в стандартный выходной канал (stdout). Стандартная ошибка канал (поток stderr) не будет получать любые данные.[...]
но
-
QProcess::ForwardedChannels
:QProcess
вперед выход из запущенного процесса на основной процесс. что-нибудь дочерний процесс записывает в стандартный вывод и стандартная ошибка будет записано в стандартный вывод и стандартная ошибка основного процесса.