Ich versuche zu versuchen, einen Prozess von F # zu starten, warte bis er fertig ist, aber lese ihn auch progressiv.Einen Prozess synchron starten und die Ausgabe "streamen"
Ist dies der richtige/beste Weg? (In meinem Fall ich versuche git Befehle auszuführen, aber das ist tangential zur Frage)
let gitexecute (logger:string->unit) cmd =
let procStartInfo = new ProcessStartInfo(@"C:\Program Files\Git\bin\git.exe", cmd)
// Redirect to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput <- true
procStartInfo.UseShellExecute <- false;
// Do not create the black window.
procStartInfo.CreateNoWindow <- true;
// Create a process, assign its ProcessStartInfo and start it
let proc = new Process();
proc.StartInfo <- procStartInfo;
proc.Start() |> ignore
// Get the output into a string
while not proc.StandardOutput.EndOfStream do
proc.StandardOutput.ReadLine() |> logger
Was ich nicht verstehe, ist, wie die proc.Start() eine boolean zurückgeben kann und auch asynchron genug für mich sein, um die Ausgabe schrittweise zu bekommen.
Leider habe ich momentan keine ausreichend große Repository haben - oder genug Maschine verlangsamen, in der Lage sein zu sagen, welche um die Dinge in geschehen ...
UPDATE
Ich habe versucht, Brians Vorschlag, und es funktioniert.
Meine Frage war ein bisschen vage. Mein Missverständnis war, dass ich annahm, dass Process.Start() den Erfolg des Prozesses als Ganzes zurückgab, und nicht nur vom "Start", und somit konnte ich nicht sehen, wie es funktionieren konnte.
Ich hatte einige Erfolge mit Asynchronous Workflows für diese Art von Aufgabe: http://StackOverflow.com/Questions/2649161/Need-Help-Grenze-Async-and-Fsi – Stringer
Ich bin eigentlich nicht sicher, was die Frage ist Hier. Funktioniert Ihr Code oben oder nicht? Was ist das Problem? –
Es scheint mir, Sie könnten tester.exe schreiben, schreibt ein paar Zeilen an stdout und flushes, wartet zwei Sekunden, schreibt zwei weitere Zeilen, ... und benutzt das, um zu testen, ob sich dieser Code so verhält, wie Sie wollen, ja? – Brian