예제 #1
0
        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());
        }
예제 #2
0
 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));
 }
예제 #3
0
        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,
                });
            }
        }