Wie Lesen von standard-Ausgabe-Zeile für Zeile?
Möchte ich untersuchen Zeile für Zeile von der standard-Ausgabe aus dem Prozess. nach dem Lesen der zweiten Zeile myProcess.StandardOutput.EndofStream ändern von false auf true. Daher verlässt while-Schleife. Vielleicht sollte ich etwas anderes verwenden?
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = my_command;
myProcess.StartInfo.Arguments = " "+ location;
myProcess.StartInfo.CreateNoWindow = true;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.Start();
while (!myProcess.StandardOutput.EndOfStream)
{
string standard_output = myProcess.StandardOutput.ReadLine();
if (standard_output.Contains("xx"))
{
//do something
break;
}
}
myProcess.WaitForExit();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesung aus StandardOutput ist nicht wie das Lesen aus einer Datei, die einen definitiven Endpunkt. Ein StreamReader-süchtig nach StandardOutput-erreichen EndOfStream (D. H. alle verfügbare Ausgabe gelesen wurde), bevor der Prozess beendet.
ReadLine jedoch warten, bis Daten verfügbar sind oder der stream geschlossen wird. Wenn der stream geschlossen ist, ReadLine den Wert null zurück.
Umschreiben Ihre main-loop zu verwenden, die blockierende I/O von ReadLine als die wait-Bedingung: