Как получить 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 вперед выход из запущенного процесса на основной процесс. что-нибудь дочерний процесс записывает в стандартный вывод и стандартная ошибка будет записано в стандартный вывод и стандартная ошибка основного процесса.