3

WindowsXP マシンで単純な QProcess プロジェクトを使用しています。

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() で標準出力を書きたいときにも同じことが起こります...なぜこれが起こり、どうすれば修正できますか?

4

1 に答える 1

9

これは、通常、プロセスが「標準出力」ファイルと「標準エラー」ファイルの2つのファイルに出力されるために発生します。std::coutプログラマーは、出力するファイルを手動で決定できます(これらのファイルにはとを介してアクセスしますstd::cerr)。経験則では、プログラムの実際の結果をstdoutに出力し、stderr(エラー、診断など)を出力します。

ffmpegを実行すると、stdoutに何も出力されず(おそらく、エンコードされたファイルがそこで印刷される特別なモード用に予約されています)、すべてのテキストメッセージがstderrに出力されます。したがって、setStandardErrorFile()関数を使用して出力をキャプチャする必要があります。

于 2009-10-26T10:09:20.573 に答える