7 ms·
Nice idea. A few problems spring to mind: * Doing the following will hang if the stdout buffer fills up: var output = process.StandardOutput.ReadToEnd();
by duncans 14y ago
Nice idea. A few problems spring to mind:
* Doing the following will hang if the stdout buffer fills up:
var output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
Take a look at Kudu (Azure's Git publishing platform) for the way they do it: https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Infrastructure/Executable.cs https://github.com/projectkudu/kudu/blob/master/Kudu.Core/In...
* You need to expose a way to capture `StandardError`.
- timrobinson 14y agoIt won't hang as long as you're redirecting only standard output. If you want to read both StandardOutput and StandardError, you need to do it from separate threads: either with explicit BeginInvoke/EndInvoke calls as in Kudu, or more simply, by listening on the OutputDataReceived/ErrorDataReceived events then calling BeginOutputReadLine/BeginErrorReadLine. (The reason for this is that the two streams are redirected to separate pipes, each of which has its own fixed-size buffer. If you forget to read from one pipe while you read from the other, its buffer fills up, and the writer - the program being executed - blocks. With standard error redirection turned off, the program writes directly to the console, which is safe.)
- manojlds 14y agoYes, I have so for been working on getting the Base API right. Will be adding background process, stderr redirect etc. Thanks for the input.