Я ищу попытку начать процесс с 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() может возвращать логическое значение, а также быть достаточно асинхронным для того, чтобы я получал выход из этого процесса постепенно.
К сожалению, в настоящее время у меня нет достаточно большого хранилища - или достаточно медленной машины, чтобы иметь возможность рассказать, в каком порядке происходят события...
UPDATE
Я попробовал предложение Брайана, и он действительно работает.
Мой вопрос был немного расплывчатым. Мое недоразумение состояло в том, что я предположил, что Process.Start() вернул успех процесса в целом, а не только "Пуск", и поэтому я не мог понять, как он может работать.