Перенаправление вывода процесса C #

Я хотел бы перенаправить стандартный вывод процесса в строку для последующего анализа. Я также хотел бы видеть результат на экране во время выполнения процесса, а не только после его завершения.

Это вообще возможно?


person Idanis    schedule 03.09.2013    source источник
comment
Расскажите подробнее о том, что вы на самом деле пытаетесь сделать.   -  person Ronak Patel    schedule 03.09.2013
comment
возможный дубликат C # получать вывод процесса во время работы   -  person Sriram Sakthivel    schedule 03.09.2013


Ответы (2)


Используйте RedirectStandardOutput.

Образец из MSDN:

// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();

Также см. OutputDataReceived и _ 4_ в качестве альтернативы ReadToEnd(), которая лучше выполнит ваше требование" видеть вывод во время выполнения процесса ".

person nmaier    schedule 03.09.2013

Если вы хотите выполнить исполняемый файл из своего приложения C # и получить от него выходные данные, вы можете использовать приведенный ниже код

System.Diagnostics.Process p = new System.Diagnostics.Process();            

p.StartInfo.FileName = "PATH TO YOUR FILE";
p.StartInfo.UseShellExecute = false;
p.StartInfo.Arguments = metalType + " " + graphHeight + " " + graphWidth;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;              

p.EnableRaisingEvents = true;
p.Start();            
svgText = p.StandardOutput.ReadToEnd();

using(StreamReader s = p.StandardError)
{
    string error = s.ReadToEnd();
    p.WaitForExit(20000);
}

Не пытайтесь написать p.EnableRaisingEvents = true;

person Ronak Patel    schedule 03.09.2013
comment
EnableRaisingEvents требуется только для Process.Exited события. - person Ronnie Overby; 09.01.2019