RedirectStandardOutput, когда основное приложение завершает работу, используя F # - PullRequest
0 голосов
/ 14 июня 2011

Примите следующий код:

let sw = new StreamWriter("out.txt", false)
sw.AutoFlush <- true

let proc = new Process()
proc.StartInfo.FileName <- path
proc.StartInfo.RedirectStandardOutput <- true
proc.StartInfo.UseShellExecute <- false
proc.OutputDataReceived.Add(fun b -> sw.WriteLine b.Data )
proc.Start() |> ignore
proc.BeginOutputReadLine()

Я создаю процесс и выхожу из основного приложения. Процесс все еще выполняется (как и должно быть), но он перестает перенаправлять стандартный вывод. Есть ли способ, как продолжить запись стандартного вывода в файл даже после выхода из основного приложения?

PS: я должен выйти из основного приложения и не могу дождаться завершения процесса
PPS: я хотел бы сделать то же самое для стандартного вывода ошибок

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Я думаю, что ответ desco может сработать, если RedirectStandardOutput неверно. Вывод не записывается в файл после завершения процесса, поскольку обработчик события OutputDataReceived больше не существует. Если возможно, я бы рекомендовал передать путь к выходному файлу в вашу программу (предположим, что нет пути означает запись в stdout). С этим на месте должно быть легко делать то, что вы пытаетесь сделать.

0 голосов
/ 14 июня 2011

Вы можете выполнить перенаправление, запустив процесс с соответствующей командной строкой: Перенаправить stdout и stderr в один файл в dos ?

...