QProcess :: setStandardOutputFile создает только 0kb файл
Вопрос
Я использую простой QProcess-Project на 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);
Процесс работает просто отлично, ffmpeg создает все файлы, которые я хочу. Но файл журнала хранится полностью пустым. То же самое происходит, когда я хочу написать стандартный вывод в qDebug () ... Почему это происходит и как я могу это исправить?
Решение
Это происходит потому, что обычно процесс печати выполняется в два файла: " стандартный вывод " файл и "стандартная ошибка" файл. Программист может вручную решить, в какой файл выводить данные (доступ к ним осуществляется через std :: cout
и std :: cerr
). Основное правило - печатать, чтобы выводить реальный результат программы, а на stderr - ошибки, диагностику и т. Д.
Я запускаю ffmpeg, и так получилось, что он ничего не печатает на стандартный вывод (возможно, зарезервировав его для специального режима, в котором там печатается закодированный файл), и все текстовые сообщения печатаются на стандартный вывод. Поэтому вы должны использовать функцию setStandardErrorFile ()
выход.