我有一个使用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输出完全不同?
聚苯乙烯。两个例子中的参数都是相同的。
答案 0 :(得分:1)
那是因为wget检测到你没有使用可见的控制台运行。你可以用一些参数来改变它。
具体的原因是wget构建[====
的方式是覆盖当前行。您将通过重定向看到的输出可能是这样的:
5% [=
10% [==
15% [===
20% [====
等。所有这些都在一条新线上。
您可以通过向参数添加--progress=bar
来强制执行此类反馈。
答案 1 :(得分:0)
控制台和文件非常不同。进度条清楚地使用了一些特殊的控制台特定功能,这些功能在重定向时(实际上是文件)不存在。