qt process stdout qprocess

qt - ¿Cómo obtener STDOUT de un QProcess?



(2)

Antes de comenzar su proceso llame:

process.setProcessChannelMode(QProcess::MergedChannels);

Causará la impresión de todo (incluso la salida STDERR) a la salida STDOUT.

Pensé que obtendría el resultado de un QProcess usando el siguiente código:

// 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!");

Lo que espero es ver el resultado del programa impreso en la consola de depuración, pero todo lo que veo es:

¡Hecho!

Yo sé eso:

  • El programa se inicia bien, porque el mensaje al final se imprime.
  • El programa imprime el resultado porque ejecutar exactamente el mismo comando en el terminal produce una larga cadena de texto como se esperaba.

¿Qué estoy haciendo mal aquí?


Aquí hay una aclaración:

De acuerdo con http://doc.qt.io/qt-5/qprocess.html#ProcessChannelMode-enum ,

  • QProcess::MergedChannels : QProcess combina la salida del proceso en ejecución en el canal de salida estándar (stdout). El canal de error estándar (stderr) no recibirá ningún dato. [...]

pero

  • QProcess::ForwardedChannels : QProcess reenvía la salida del proceso en ejecución al proceso principal. Cualquier cosa que el proceso secundario escriba en su salida estándar y error estándar se escribirá en la salida estándar y el error estándar del proceso principal.