private static (int exitCode, string output) CaptureConsoleWrites(Func <int> function) { using var writer = new StringWriter(); var @out = new DuplexTextWriter(Console.Out, writer); var error = new DuplexTextWriter(Console.Error, writer); Console.SetOut(@out); Console.SetError(error); try { return(function(), writer.ToString()); } finally { Console.SetOut(@out.Original); Console.SetError(error.Original); } }
private static Task <int> InterceptingSystemConsoleWrites(CommandContext context, ExecutionDelegate next) { if (Console.Out is DuplexTextWriter) { throw new InvalidOperationException("System.Console is already being intercepted. Interception does not currently support parellel executions."); } var @out = new DuplexTextWriter(Console.Out, context.Console.Out); var error = new DuplexTextWriter(Console.Error, context.Console.Error); try { Console.SetOut(@out); Console.SetError(error); return(next(context)); } finally { Console.SetOut(@out.Original); Console.SetError(error.Original); } }