F# からプロセスを開始しようとしていますが、終了するまで待ちますが、出力を徐々に読みます。
これは正しい/最善の方法ですか?(私の場合、gitコマンドを実行しようとしていますが、それは質問に接しています)
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
私が理解していないのは、proc.Start() がどのようにブール値を返すことができるか、そして同時に出力を段階的に取得するのに十分なほど非同期になるかということです。
残念ながら、私は現在、物事がどのような順序で起こっているのかを知るのに十分な大きさのリポジトリ、または十分に遅いマシンを持っていません...
アップデート
ブライアンの提案を試してみましたが、うまくいきます。
私の質問は少し曖昧でした。私の誤解は、 Process.Start() が「開始」だけでなく、プロセス全体の成功を返すと想定していたため、それがどのように機能するかわかりませんでした。