如何获取整个process.StandardOutput作为字符串?

时间:2017-05-30 10:32:07

标签: c# visual-studio-2015 cmd redirectstandardoutput

我有以下代码。

        Process compiler = new Process();
        compiler.StartInfo.FileName = "cmd.exe";
        compiler.StartInfo.Arguments = ("/C git push gitlab --delete branch");
        compiler.StartInfo.UseShellExecute = false;
        compiler.StartInfo.CreateNoWindow = false;
        compiler.StartInfo.RedirectStandardOutput = true;
        compiler.Start();
        string output = compiler.StandardOutput.ReadToEnd();
        compiler.WaitForExit();
        compiler.Close();

我只获得null中的string output值。但我在输出屏幕中得到了以下数据。

  

错误:无法删除'branch':远程引用不存在

     

错误:无法将某些引号推送到“https://gitlab.company.com/test2.git

为什么我在output字符串中得到空值?为什么流程 compiler.StandardOutput.ReadToEnd();无法获取这些行?

我在控制台屏幕中输出了输出数据,因为我在false中设置了CreateNoWindow。否则我不会在控制台屏幕上获取数据。

任何人都建议从Process.StandardOutPut获取输出屏幕数据。

2 个答案:

答案 0 :(得分:1)

当您读取StandardOutput时获得空值的原因是因为应用程序在该时间点没有写入任何内容。

有两个与Process相关联的事件,您可以订阅这些事件来阅读数据 - OutputDataReceived and Exited

OutputDataReceived Documentation & Example

Exited Documentation & Example

答案 1 :(得分:0)

我在process.Standarderror

中获得了所需的输出