QProcess :: setStandardOutputFile solo crea archivos de 0kb
Pregunta
Estoy utilizando un proyecto QProcess simple en una máquina con Windows XP:
QString program = "U:\\ffmpeg.exe";
QStringList arguments;
arguments << "-i" << "U:\\clock.avi" << "U:\\tmp_jpeg\\foo-%03d.jpeg";
process.setStandardOutputFile("U:\\log.txt", QIODevice::Append);
process.start(program, arguments);
El proceso funciona bien, ffmpeg crea todos los archivos que quiero. Pero el archivo de registro se mantiene completamente vacío. Lo mismo sucede cuando quiero escribir la salida estándar en qDebug () ... ¿Por qué sucede esto y cómo puedo solucionarlo?
Solución
Esto sucede porque generalmente los procesos se imprimen en dos archivos: " salida estándar " archivo y " error estándar " expediente. El programador puede decidir manualmente a qué archivo enviar (se accede a través de std :: cout
y std :: cerr
). La regla de oro es imprimir para mostrar el resultado real del programa, y ??para indicar errores, diagnósticos, etc.
Ejecuto ffmpeg y sucede que no se imprime nada en la salida estándar (probablemente, reservándolo para el modo especial, donde se imprime el archivo codificado), y todos los mensajes de texto se imprimen en stderr. Por lo tanto, debe utilizar la función setStandardErrorFile ()
para capturar la salida.