命令重定向问题

时间:2012-11-26 03:16:11

标签: c# command-line io standards

这是我的代码

//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字符串为空,结果显示在控制台中。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

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

如果您需要在(大致)适当的交错中捕获标准错误和标准输出,您可能需要在OutputDataReceivedErrorDataReceived上使用带有回调的异步版本并使用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,它应该是相反的顺序,因为你的应用可能会转储更多,直到它最终完成操作