.NET System.Process:当您重定向 StandardError 时,控制台窗口不会收到任何输出
Posted
技术标签:
【中文标题】.NET System.Process:当您重定向 StandardError 时,控制台窗口不会收到任何输出【英文标题】:.NET System.Process: when you redirect StandardError, console window receives no output 【发布时间】:2018-12-17 20:00:16 【问题描述】:我想获取控制台程序的错误输出,以防它崩溃。但我希望标准输出显示在控制台窗口中。但是,如果我重定向标准错误,则不会向控制台窗口输出任何内容。
Dim p As New Process
p.StartInfo.Filename = filename
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardError = True
p.EnableRaisingEvents = True
p.Start
p.BeginReadErrorLine
所以现在如果启动的进程(控制台程序)崩溃,我会得到预期的错误输出。但是,标准输出在控制台程序中是不可见的。
我写了一个测试程序来启动。
static void Main(string[] args)
for (int i = 0; i < 1000; i++)
Console.WriteLine(i);
object m = null;
string s = m.ToString();
我希望看到数字 0 - 999 在控制台窗口中滚动并通过重定向获得错误输出,但我在控制台窗口中什么也看不到,除非没有重定向。
我没有发现任何与此问题相关的问题。这是一个缺陷还是我忽略了什么?
【问题讨论】:
【参考方案1】:我尝试复制相同的内容,但我不能。这是我的代码,我只重定向错误,但我仍然可以在控制台窗口上看到输出:
public class Program
static void Main(string[] args)
ExecuteCommand(@"cmd.exe", @"/c C:\Users\*****\Documents\Test\ConsoleApp1.exe");
public static int ExecuteCommand(string exePath, string cmdText)
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = exePath;
startInfo.Arguments = cmdText;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
process.StartInfo = startInfo;
process.Start();
process.BeginErrorReadLine();
process.WaitForExit();
return process.ExitCode;
这是我的输出:
我在做与你尝试过的不同的事情吗?
【讨论】:
我不想阅读标准输出。我希望标准输出像往常一样进入控制台窗口。我只想阅读标准错误。但是如果我重定向标准错误,它会阻止标准输出进入控制台。 我已经更新了我的答案。 ConsoleApp1.exe 与您在“测试程序”问题中发布的代码完全相同。 我没有执行 cmd.exe 并从中启动我的程序。我的看起来更像这样: static void Main(string[] args) ExecuteCommand(@"C:\Users*****\Documents\Test\ConsoleApp1.exe");以上是关于.NET System.Process:当您重定向 StandardError 时,控制台窗口不会收到任何输出的主要内容,如果未能解决你的问题,请参考以下文章