我在WindowsXP-Machine上使用简单的QProcess-Project:
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-File保持完全为空。当我想在qDebug()处写标准输出时也会发生同样的情况...... 为什么会发生这种情况,我该如何解决?
答案 0 :(得分:8)
这是因为通常进程会打印成两个文件:“标准输出”文件和“标准错误”文件。程序员可以手动决定输出哪个文件(通过std::cout
和std::cerr
访问它们)。经验法则是打印到stdout程序的实际结果,以及stderr - 错误,诊断等。
我运行ffmpeg,它发生了,它没有打印到stdout(可能,保留它为特殊模式,其中打印编码文件),所有文本消息打印到stderr。因此,您应该使用setStandardErrorFile()
函数来捕获输出。