Как получить вывод Системы. Диагностика. Процесс?

Необходимо бросить массив - возвращенный массив на самом деле имеет требуемый тип, т.е. myEnum[], если Вы просите typeof(myEnum):

myEnum[] values = (myEnum[]) Enum.GetValues(typeof(myEnum));

Затем values[0] и т.д.

34
задан Lucas Jones 7 September 2009 в 18:55
поделиться

2 ответа

Что вам нужно сделать, так это захватить стандартный поток вывода:

p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
// instead of p.WaitForExit(), do
string q = "";
while ( ! p.HasExited ) {
    q += p.StandardOutput.ReadToEnd();
}

Возможно, вам также потребуется сделать что-то подобное с StandardError . Затем вы можете делать все, что хотите, с помощью q .

Это немного привередливо, как я обнаружил в одном из моих вопросов

Как указал Джон Скит, это неразумно с точки зрения производительности использовать такую ​​конкатенацию строк; вместо этого вам следует использовать StringBuilder :

p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
// instead of p.WaitForExit(), do
StringBuilder q = new StringBuilder();
while ( ! p.HasExited ) {
    q.Append(p.StandardOutput.ReadToEnd());
}
string r = q.ToString();
49
ответ дан 27 November 2019 в 16:29
поделиться

Я знаю, что это старый вопрос, но все равно добавлю к нему.

Если все, что вы хотите сделать, это отобразить вывод процесса командной строки, и вы создаете процесс из окна консоли, вам нужно только перенаправить стандартный ввод (да, я знаю, что это звучит неправильно, но работает ).

Итак:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo(ffmpegPath, myParams);
p.UseShellExecute = false;
p.RedirectStandardInput = true;
p.Start();
p.WaitForExit();

Подойдет.

3
ответ дан 27 November 2019 в 16:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: