我的應用程序定期啓動帶有process.start的控制檯程序。我需要「實時」監控程序的輸出。監視進程標準輸出不一定使用CR/LF
例如,程序寫入以下文本控制檯: 處理.................
每一秒左右,一個新的點出現,讓用戶知道該程序仍在處理中。但是,...直到程序輸出CR/LF,我無法檢索程序的標準輸出(它仍在運行時)。
我能做些什麼來實時獲得輸出 - 比方說,比如在VB.NET中將它輸入數據庫中?
我的應用程序定期啓動帶有process.start的控制檯程序。我需要「實時」監控程序的輸出。監視進程標準輸出不一定使用CR/LF
例如,程序寫入以下文本控制檯: 處理.................
每一秒左右,一個新的點出現,讓用戶知道該程序仍在處理中。但是,...直到程序輸出CR/LF,我無法檢索程序的標準輸出(它仍在運行時)。
我能做些什麼來實時獲得輸出 - 比方說,比如在VB.NET中將它輸入數據庫中?
如何將輸出發送到文本文件並每秒讀取該文件?
因爲我確實有一個原型應用程序在家裏做了這樣的事情,所以我感到內疚。我會看看我能否取回它。在此期間看看這個鏈接:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx
它顯示瞭如何應用程序的輸出重定向到一個自定義的流如
Public Class Form1
Private _p As Process
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim psi As New ProcessStartInfo()
psi.FileName = "C:\mydir.bat"
psi.RedirectStandardOutput = True
psi.UseShellExecute = False
_p = New Process()
_p.Start(psi)
tmrReadConsole.Enabled = True
End Sub
Private Sub tmrReadConsole_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrReadConsole.Tick
If _p IsNot Nothing Then
txtConsoleOutput.Text = _p.StandardOutput.ReadToEnd()
End If
End Sub
End Class
以上是一個webform,它具有一個計時器,用於輪詢控制檯的輸出流並將其內容放入文本框中。它不工作(因此我想找到我的其他應用程序),但你明白了。
希望這會有所幫助。
不幸的是,我不控制控制檯應用程序。另外,除非控制檯應用程序發送回車/換行符(CRLF),否則我不會提供任何數據(或者我是否做錯了什麼?) – Mephisztoe 2009-06-29 14:45:23
@Tronex - 如果您可以獲得標準輸出,則可以將其重定向到一份文件。您實際上並不需要更改程序本身,只需在程序開始將輸出重定向到文件時使用「>」運算符即可。 – 2009-06-29 14:49:47