Подтвердить что ты не робот

Как получить 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!");

Я ожидаю увидеть выход из программы, напечатанной на консоли отладки, но все, что я вижу, это:

Готово!

Я знаю, что:

  • Программа запускается нормально, потому что печатается сообщение в конце.
  • Программа выводит вывод на печать, потому что выполнение той же самой команды в терминале создает длинную строку текста, как ожидалось.

Что я здесь делаю неправильно?

4b9b3361

Ответ 1

для начала вызова процесса: process.setProcessChannelMode(QProcess::MergedChannels);. Это вызовет печать всего (даже выход stderr) на вывод stdout.

Ответ 2

Вот некоторые пояснения:

Согласно http://doc.qt.io/qt-5/qprocess.html#ProcessChannelMode-enum,

  • QProcess:: MergedChannels: QProcess объединяет вывод текущего процесса в стандартный выходной канал (stdout). Канал стандартной ошибки (stderr) не получит любые данные. [...]

но

  • QProcess:: ForwardedChannels: QProcess перенаправляет вывод текущего процесса на основной процесс. Anything дочерний процесс записывает на стандартный вывод, а стандартная ошибка будет записана на стандартный вывод и стандартную ошибку основного процесса.