Как получить STDOUT от QProcess? - PullRequest
24 голосов
/ 04 октября 2010

Я думал, что собираюсь получить вывод из 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 ]

28 голосов
/ 04 октября 2010

Перед запуском вызова процесса:

process.setProcessChannelMode(QProcess::MergedChannels);

Это приведет к печати всего (даже вывода STDERR) на вывод STDOUT.

10 голосов
/ 30 января 2015

Вот некоторые уточнения:

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

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

, но

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