private static async Task <string> ReadToOutput(StreamReader reader, IWriteAnsi output, ConsoleColor color) { var builder = new StringBuilder(); while (!reader.EndOfStream) { var line = await reader.ReadLineAsync(); builder.AppendLine(line); output?.WriteLine(line, color); } return(builder.ToString()); }
public static ProcessResult Run(string workDir, string command, IWriteAnsi output = null) { SplitCommand(command, out var _file, out var _args); return(Run(workDir, _file, _args, output)); }
public static ProcessResult Run(string workDir, string filename, string arguments, IWriteAnsi output = null) { using (var process = Start(workDir, filename, arguments)) { if (process == null) { throw new ApplicationException("Failed to start process!"); } var readOutTask = ReadToOutput(process.StandardOutput, output, ConsoleColor.Gray); var readErrorTask = ReadToOutput(process.StandardError, output, ConsoleColor.DarkYellow); process.WaitForExit(); Task.WaitAll(readOutTask, readErrorTask); return(new ProcessResult { ExitCode = process.ExitCode, Output = readOutTask.Result, Error = readErrorTask.Result, }); } }