So deaktivieren Sie die Ausgabepufferung in Process.StandardOutput

Diese Frage wurde mehr als einmal gestellt, aber ich habe in keiner dieser Diskussionen eine zufriedenstellende Antwort gefunden.

Ich starte einen Befehlszeilenprozess, der eine Echtzeitmessung für STDOUT erstellt und ungefähr jede Sekunde ein neues Ergebnis liefert. Die Verwendung von System.Diagnostics.Process.StandardOutput führt zu einer völlig inakzeptablen Verzögerung (über 20 Sekunden), da die STDOUT-Daten den 4-KB-Puffer im Process.StandardOutput StreamReader durchlaufen und es anscheinend keine Möglichkeit gibt, dies zu umgehen.

Calling Process.StandardOutput.BaseStream.Flush () funktioniert nicht.

Ich habe versucht, Process.StandardOutput byteweise synchron zu lesen, bin aber immer noch 4 KB hinter der tatsächlichen Ausgabe zurück.

Kann zumindest jemand für mich nachprüfen, ob es möglich ist, alle Pufferprobleme zu überwinden, die bei der Umleitung von STDOUT auftreten, und die Daten in meiner Anwendung zu erhalten, sobald sie im Shell-Fenster erschienen wären? Kann ich von der Process-Klasse erben und das Verhalten des StandardOutput-Streamreader ändern? Muss ich mir rohe WINAPI-Aufrufe ansehen?

Somehow, das muss erledigt werden, auch wenn ich am Ende nicht verwaltetes C ++ schreibe, um die Aufgabe zu starten und die Ausgabe zu verbrauchen, und dies zu verknüpfen. Jede Hilfe wird sehr geschätzt. Ich bin mit meinem Latein am Ende..

Edit: Ich brauche anscheinend eine .NET-Implementierung der "expect" -Bibliotheken, die für C / C ++, Perl, Python und Java verfügbar sind (dies sind die einzigen, die ich bisher gefunden habe). Weiß jemand, ob es so ein Biest gibt?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage