F #에서 프로세스를 시작하려고합니다. 완료 될 때까지 기다리면서 점진적으로 출력을 읽습니다.프로세스를 동 기적으로 시작하고 출력을 "스트리밍"
올바른 방법인가요?
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()가 'Start'뿐만 아니라 프로세스 전체의 성공을 반환했다는 것을 가정하고 따라서 이 일 수 있음을 알 수 없었습니다.
비동기 워크 플로를 사용하여 다음과 같은 작업에 성공했습니다. http://stackoverflow.com/questions/2649161/need-help-regarding-async-and-fsi – Stringer
실제로 어떤 질문이 있는지 잘 모르겠습니다. 이리. 위의 코드가 작동하지 않습니까? 문제가 무엇입니까? –
tester.exe를 작성하면 stdout과 flushes에 몇 줄을 쓰고 2 초를 기다리며 또 다른 두 줄을 씁니다.이 코드가 원하는대로 작동하는지 테스트 할 수 있습니까? – Brian