1

ここに私のコードがあります

//Create process
System.Diagnostics.Process pProcess = new System.Diagnostics.Process();

//strCommand is path and file name of command to run
pProcess.StartInfo.FileName = "ffmpeg.exe";

//strCommandParameters are parameters to pass to program
pProcess.StartInfo.Arguments = "-i " + videoName;

pProcess.StartInfo.UseShellExecute = false;

//Set output of program to be written to process output stream
pProcess.StartInfo.RedirectStandardOutput = true;

//Start the process
pProcess.Start();

//Get program output
string strOutput = pProcess.StandardOutput.ReadToEnd();

//Wait for process to finish
pProcess.WaitForExit();

コマンドは機能しますが、strOutput文字列は空です。結果はコンソール内に表示されます。ここで何か不足していますか?

4

2 に答える 2

1

プログラムがその出力をStandardOutputではなくStandardErrorに書き込んでいる可能性があります。.RedirectStandardError = trueを使用して、.pProcess.StandardError.ReadToEnd()その出力をキャプチャして みてください。

標準エラーと標準アウトの両方を(大まかに)適切なインターリーブでキャプチャする可能性が必要な場合は、コールバックをオンOutputDataReceivedErrorDataReceivedしてBeginOutput/ErrorReadLineを使用する非同期バージョンを使用する必要があります。

于 2012-11-26T03:24:38.200 に答える
-2

エラーが発生した場合に Std Error もキャプチャするようにしてください。代わりに使用されます。

        //Set output of program to be written to process output stream
        pProcess.StartInfo.RedirectStandardError = true;
        pProcess.StartInfo.RedirectStandardOutput = true;

        //Start the process
        pProcess.Start();

        //Wait for process to finish
        pProcess.WaitForExit();

        //Get program output
        string strError = pProcess.StandardError.ReadToEnd();
        string strOutput = pProcess.StandardOutput.ReadToEnd();

出力を読み取った後、WaitForExit の終了を待つ理由が不思議です。アプリが ops を最終的に完了するまでさらにダンプする可能性があるため、逆の順序にする必要があります。

于 2012-11-26T03:36:44.857 に答える