public ProcessResults Run()

in src/Amazon.Common.DotNetCli.Tools/ProcessFactory.cs [55:107]


        public ProcessResults Run(int timeoutInMilliseconds = 60000)
        {

            var stdout = new StringBuilder();
            var stderr = new StringBuilder();

            using (var proc = new Process())
            {
                proc.StartInfo = _info;
                proc.EnableRaisingEvents = true;
                proc.OutputDataReceived += (_, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data)) stdout.Append(e.Data);
                };
                proc.ErrorDataReceived += (_, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data)) stderr.Append(e.Data);
                };
                bool executed;
                int? exitCode;
                string output;
                string error;

                if (proc.Start())
                {
                    proc.BeginOutputReadLine();
                    proc.BeginErrorReadLine();
                    executed = proc.WaitForExit(timeoutInMilliseconds);
                    if (executed)
                        proc.WaitForExit(); // this ensures STDOUT is completely captured
                    else
                        stderr.Append($"{(stderr.Length > 0 ? "\n" : "")}Timeout waiting for process");
                    exitCode = proc.ExitCode;
                    output = stdout.ToString();
                    error = stderr.ToString();
                }
                else
                {
                    executed = false;
                    exitCode = null;
                    output = "";
                    error = "Unable to launch process";
                }

                return new ProcessResults()
                {
                    Executed = executed,
                    ExitCode = exitCode,
                    Output = output,
                    Error = error
                };
            }
        }