读取进程的标准输出,始终为空

时间:2011-12-25 21:23:36

标签: c#

运行此代码:

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "tool.exe";
p.Start();
p.WaitForExit();

使tool.exe运行,并在标准输出上输出一些内容。但是,如果我尝试使用以下方法捕获内容:

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = "tool.exe";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();

Console.WriteLine(output);
Console.ReadLine();

然后没有输出,即我的变量“output”总是空的。

我已经确认tool.exe确实输出到标准输出(而不是标准错误)。

任何人都知道发生了什么?这里开始感到愚蠢,因为它似乎是一本真正的教科书示例...

1 个答案:

答案 0 :(得分:0)

p.OutputDataReceived += new DataReceivedEventHandler
        (
            delegate(object sender, DataReceivedEventArgs e)
            {                   
                using (StreamReader output = p.StandardOutput)
                {
                    retMessage = output.ReadToEnd();
                }
            }
        );

试试这个:)