C# - 处理重定向输出 - 与CMD窗口不同的控制台

时间:2010-10-25 10:46:36

标签: c# visual-studio command-line process command-prompt

我有一个使用cmd程序Process的应用程序。 Process的输出是重定向的,如下所示:

pr.StartInfo.RedirectStandardOutput = true;
pr.StartInfo.UseShellExecute = false;
pr.StartInfo.CreateNoWindow = true;                                         
pr.EnableRaisingEvents = true
pr.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
pr.OutputDataReceived += new DataReceivedEventHandler(OnDataReceived);      
pr.ErrorDataReceived += new DataReceivedEventHandler(OnDataReceived); 

然后使用以下命令将输出写入控制台:

public void OnDataReceived(object sender, DataReceivedEventArgs e)
{
    if(e.Data != null)                                  
    {
        Console.WriteLine(e.Data);
    }
}

我的问题是Visual Studio打印输出,它与命令行输出非常不同。例如,我正在尝试从输出中提取数据以查看已完成的工作量。我的应用程序输出:

0K .......... .......... .......... .......... ...... .... 1%(null)
50K .......... .......... .......... .......... ......... 。2%(null)
100K .......... .......... .......... .......... ......... .3%(null)
150K .......... .......... .......... .......... ......... .5%(null)

原始Commandline程序输出(进度条和百分比随着时间的推移而累积):
100%[===================================]

这似乎没有什么大不同,但对于我想要实现的目标却是如此。为什么Visual Studio输出与CMD输出完全不同?

聚苯乙烯。两个例子中的参数都是相同的。

2 个答案:

答案 0 :(得分:1)

那是因为wget检测到你没有使用可见的控制台运行。你可以用一些参数来改变它。

具体的原因是wget构建[====的方式是覆盖当前行。您将通过重定向看到的输出可能是这样的:

  5% [=
 10% [==
 15% [===
 20% [====

等。所有这些都在一条新线上。

您可以通过向参数添加--progress=bar来强制执行此类反馈。

答案 1 :(得分:0)

控制台和文件非常不同。进度条清楚地使用了一些特殊的控制台特定功能,这些功能在重定向时(实际上是文件)不存在。