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

程序可能会将其输出写入 StandardError 而不是 StandardOutput。尝试使用.RedirectStandardError = true然后.pProcess.StandardError.ReadToEnd()捕获该输出。

如果您需要在(大致)正确的交错中捕获标准错误和标准输出的可能性,您可能需要使用带有回调的异步版本,OutputDataReceivedErrorDataReceived使用 BeginOutput/ErrorReadLine。

于 2012-11-26T03:24:38.200 回答
-2

尝试捕获 Std 错误,因为任何错误事件都会被使用。

        //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,它应该是相反的顺序,因为你的应用程序可能会转储更多,直到它最终完成操作

于 2012-11-26T03:36:44.857 回答