2010-10-25 69 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

相關問題