QProcess :: setStandardOutputFile crea solo file 0kb
Domanda
Sto usando un semplice QProcess-Project su una macchina WindowsXP:
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);
Il processo funziona bene, ffmpeg crea tutti i file che voglio. Ma il file di registro rimane completamente vuoto. Lo stesso succede quando voglio scrivere l'output standard su qDebug () ... Perché succede e come posso ripararlo?
Soluzione
Ciò accade perché in genere i processi vengono stampati in due file: "output standard" file e "errore standard" file. Il programmatore può decidere manualmente a quale file eseguire l'output (sono accessibili tramite std :: cout
e std :: cerr
). La regola empirica è stampare su stdout il risultato effettivo del programma e su stderr: errori, diagnostica, ecc.
Eseguo ffmpeg e succede così, che non stampa nulla su stdout (probabilmente, riservandolo per la modalità speciale, dove viene stampato il file codificato) e tutti i messaggi di testo vengono stampati su stderr. Quindi dovresti usare la funzione setStandardErrorFile ()
per catturare l'output.