Kontinuierlichen Stdout stream einlesen

17/10/2007 - 12:25 von Chris | Report spam
Hallo NG,

ich starte ein externes program über process und will nun die ausgabe des
programms wieder einlesen und ausgeben (s.u.) . problem ist das das externe
programm kontinuierliche Ausgaben erzeugt - also immer làuft.

dankbar für jeden hinweis

gruß chris

ProcessStartInfo pi = new ProcessStartInfo(@"D:\temp\abc.exe");

pi.CreateNoWindow = true;

pi.WindowStyle = ProcessWindowStyle.Hidden;

pi.RedirectStandardOutput = true;

pi.UseShellExecute = false;

Process p = Process.Start(pi);

p.WaitForExit();

p.Start();

TextReader t = p.StandardOutput;

textBox.Text = t.ReadToEnd();
 

Lesen sie die antworten

#1 Alois Seidler
17/10/2007 - 15:12 | Warnen spam
Hallo Chris,

habe einen VB-Code. Vielleicht hilft er dir weiter.
Ich starte ein Batch-Datei und schreibe die Ausgaben in eine LOG-Datei.
Kannst den Codes sicher für dich anpassen.

cu
Alois

<<<<

Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As
System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

Dim arguments() As String
arguments = e.Argument

mProcess = New Process
mProcess.EnableRaisingEvents = True
Dim workDir As String = ""
Dim info As New System.IO.FileInfo(ImportBatch)

Dim importGuid As String = e.Argument.ToString
Dim importLOG As String = procPath & importGuid & ".log"

workDir = info.DirectoryName.ToString

With mProcess.StartInfo
.FileName = ImportBatch
.Arguments = "c:\temp\Formulars\" & " " & importLOG
.WorkingDirectory = workDir
.UseShellExecute = False
.CreateNoWindow = True
.RedirectStandardOutput = True
End With

mProcess.Start()

Dim procfile As String = procPath & importGuid & ".txt"
Dim writer As New System.IO.StreamWriter(procfile)
writer.WriteLine(mProcess.Id.ToString)
writer.Close()

BackgroundWorker1.ReportProgress(1, mProcess.Id.ToString)

e.Result = StreamOutput(importLOG)
e.Result = mProcess.Id

BackgroundWorker1.ReportProgress(100)

System.IO.File.Delete(procfile)

End Sub



Private Function StreamOutput(ByVal importLog As String) As String

Dim localErr As String = ""
Dim strLine As String = ""

Try
While mProcess.StandardOutput.EndOfStream = False
If BackgroundWorker1.CancellationPending = True Then
Dim writer As New System.IO.StreamWriter(importLog, True)
writer.WriteLine("Canceled Prozess: " & importProcessID)
writer.Close()
Exit While
End If
strLine = mProcess.StandardOutput.ReadLine()
End While
Catch ex As Exception
End Try

Return localErr

End Function




















"Chris" wrote:

Hallo NG,

ich starte ein externes program über process und will nun die ausgabe des
programms wieder einlesen und ausgeben (s.u.) . problem ist das das externe
programm kontinuierliche Ausgaben erzeugt - also immer làuft.

dankbar für jeden hinweis

gruß chris

ProcessStartInfo pi = new ProcessStartInfo(@"D:\temp\abc.exe");

pi.CreateNoWindow = true;

pi.WindowStyle = ProcessWindowStyle.Hidden;

pi.RedirectStandardOutput = true;

pi.UseShellExecute = false;

Process p = Process.Start(pi);

p.WaitForExit();

p.Start();

TextReader t = p.StandardOutput;

textBox.Text = t.ReadToEnd();

Ähnliche fragen