这是我的代码
//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
字符串为空,结果显示在控制台中。我在这里错过了什么吗?
答案 0 :(得分:1)
程序可能将其输出写入StandardError而不是StandardOutput。尝试使用.RedirectStandardError = true
然后使用.pProcess.StandardError.ReadToEnd()
来捕获该输出。
如果您需要在(大致)适当的交错中捕获标准错误和标准输出,您可能需要在OutputDataReceived
和ErrorDataReceived
上使用带有回调的异步版本并使用BeginOutput / ErrorReadLine。
答案 1 :(得分:-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,它应该是相反的顺序,因为你的应用可能会转储更多,直到它最终完成操作