2010-10-04 13 views
21

que pensé que iba a conseguir la salida de un QProcess usando el siguiente código:¿Cómo obtener STDOUT de un 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!"); 

Lo que estoy esperando es ver la salida del programa impreso a la consola de depuración, pero todo lo que veo es:

¡Hecho!

Sé que:

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

¿Qué estoy haciendo mal aquí?

+3

No tiene sentido adjuntar ejecutable con traducción de idioma macro tr(). También dudo que poner el ejecutable y el parámetro como primer argumento funcione. Mejor: process.start ("php-cgi", QStringList() << "www/test.php", QIODevice :: ReadWrite); –

+0

Si no desea bloquear su aplicación mientras se ejecuta QProcess, mire la respuesta a esta pregunta: http://stackoverflow.com/questions/10098980/real-time-display-of-qprocess-output-in-a -textbrowser – parsley72

+0

Eche un vistazo a la respuesta aceptada a esta pregunta similar: http://stackoverflow.com/questions/2148185/run-linux-command-line-commands-from-qt4/2148360#2148360 – Fred

Respuesta

22

antes de iniciar su proceso llame al: process.setProcessChannelMode(QProcess::MergedChannels);. Causará la impresión de todo (incluso la salida de stderr) a salida stdout.

5

Aquí es algunas aclaraciones:

Según http://doc.qt.io/qt-5/qprocess.html#ProcessChannelMode-enum,

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

pero

  • QProcess :: ForwardedChannels:. QProcess envía la salida del proceso en ejecución en el proceso principal. Cualquier cosa el proceso secundario escribe en su salida estándar y el error estándar se escribirá en la salida estándar y el error estándar del proceso principal.
Cuestiones relacionadas