2010-10-25 68 views
3

我有一个使用cmd程序的Process应用程序。进程的输出重定向,像这样:C# - 进程重定向输出 - 与CMD窗口不同的控制台

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)

最初的命令行程序输出(进度条随着时间的推移累计百分比):
100%[===================================]

这似乎不是一个很大的区别,但对于我试图达到的目标是。为什么Visual Studio的输出与CMD完全不一样?

Ps。两个例子中的参数都是相同的。

回答

0

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

1

这是因为wget检测到您没有使用可见控制台运行。有你可以改变这一点的论据。

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

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

等所有这些都在一个新的行。

您可以通过将--progress=bar添加到参数中来强制这种类型的反馈。

+0

它是wput,而不是wget。不知道有多少差异。 – nf313743 2010-10-25 10:53:43

+0

'wput'也一样。你有没有试过添加进度条参数? – 2010-10-25 10:54:31

+0

是的。不幸的是,wput并没有提供这个参数: – nf313743 2010-10-25 11:04:30

相关问题