0

Мое приложение периодически запускает консольные программы с помощью process.start. Мне нужно отслеживать вывод программ в режиме реального времени.Мониторинг стандартного выходного процесса, который не обязательно используется CR/LF

Например, программа записывает следующий текст в консоли: обработки .................

Каждый второй или так новая точка появляется, чтобы пользователь знает, что программа все еще обрабатывается. Однако ... пока программа не выведет CR/LF, я не смогу получить стандартный вывод программы (пока он все еще работает).

Что я могу сделать, чтобы получить результат в реальном времени, скажем, в его базу данных, например, в VB.NET?

ответ

1

Как насчет отправки вывода в текстовый файл и чтения этого файла каждую секунду?

+0

К сожалению, я не управляю консольными приложениями. Кроме того, если консольное приложение не отправляет карету return/line feed (CRLF), я не выношу никаких данных (или я делаю что-то неправильно?) – Mephisztoe

+1

@Tronex - если вы можете получить стандартный вывод, вы можете перенаправить его на файл. Фактически вам не нужно менять саму программу, просто используйте оператор «>», когда программа запускается для перенаправления вывода в файл. –

1

Я потрошен, так как у меня было прототип дома, который сделал что-то вроде этого. Я посмотрю, смогу ли я его принести. В то же время взглянуть на эту ссылку:

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 

Выше, является веб-формой, которая имеет таймер, который используется для опроса выходного потока консоли и получить его содержимое в текстовое поле. Это не совсем работает (следовательно, почему я хочу найти другое приложение), но вы поняли эту идею.

Надеюсь, это поможет.

+0

Попробуйте для нажатия кнопки: Private Sub Button1_Click (ByVal отправителем как System.Object, ByVal е As System.EventArgs) Ручки Button1.Click _p = Новый процесс _p.StartInfo.FileName = «C: \ Mydir .bat» _p.StartInfo.RedirectStandardOutput = True _p.StartInfo.UseShellExecute = False _p.Start() txtConsoleOutput.Text = _p.StandardOutput.ReadToEnd End Sub –

Смежные вопросы