2009-10-26 3 views
3

Я использую простой QProcess-проект на WindowsXP-машины:QProcess :: setStandardOutputFile только создает файл 0Kb

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); 

Процесс работает просто отлично, FFmpeg создает все файлы, я хочу. Но log-файл остается полностью пустым. То же самое происходит, когда я хочу написать стандартный вывод в qDebug() ... Почему это происходит и как я могу его исправить?

ответ

8

Это происходит потому, что обычно обрабатывает печать в два файла: файл «стандартный вывод» и файл «стандартной ошибки». Программист может вручную решить, какой файл для вывода (к ним обращаются через std::cout и std::cerr). Эмпирическое правило состоит в том, чтобы печатать для вывода фактического результата программы, а также для stderr - ошибок, диагностики и т. Д.

Я запускаю ffmpeg, и так получилось, что он ничего не печатает в stdout (возможно, резервируя его для специальных режим, где там печатается кодированный файл), и все текстовые сообщения печатаются в stderr. Поэтому вы должны использовать функцию setStandardErrorFile() для захвата вывода.

Смежные вопросы