Как получить весь процесс.StandardOutput в виде строки?

У меня есть код ниже.

        Process compiler = new Process();
        compiler.StartInfo.FileName = "cmd.exe";
        compiler.StartInfo.Arguments = ("/C git push gitlab --delete branch");
        compiler.StartInfo.UseShellExecute = false;
        compiler.StartInfo.CreateNoWindow = false;
        compiler.StartInfo.RedirectStandardOutput = true;
        compiler.Start();
        string output = compiler.StandardOutput.ReadToEnd();
        compiler.WaitForExit();
        compiler.Close();

Я получаю только null значение в string output. Но я получил следующие данные на экране вывода.

ошибка: невозможно удалить "ветку": удаленная ссылка не существует

ошибка: не удалось отправить некоторые ссылки на " https://gitlab.company.com/test2.git"

Почему я получил нулевое значение в output строка? Почему процесс compiler.StandardOutput.ReadToEnd(); не удалось получить эти строки?

Я получил выходные данные на экране консоли, потому что я установил false в CreateNoWindow, Иначе я бы не получил данные на экране консоли.

Любой предложит способ получить данные экрана вывода из Process.StandardOutPut,

2 ответа

Причина, по которой вы получаете нулевое значение при чтении StandardOutput, заключается в том, что приложение на тот момент ничего не писало.

Есть два события, связанные с Process на которую вы можете подписаться, чтобы прочитать данные - OutputDataReceived and Exited

OutputDataReceived Документация и пример

Вышедшая документация и пример

Я получаю желаемый результат в process.Standarderror

Другие вопросы по тегам