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.