I am running a build, and I would like to be able to view the progress as it happens. But I would also like to save the output if the build has an error.
I know I can use Process.UseShellExecute = false
, and RedirectStandardOutput
, but that's only part of the story.
How can I do this?
Maybe like this?
class Tee
{
private readonly string m_programPath;
private readonly string m_logPath;
private TextWriter m_writer;
public Tee(string programPath, string logPath)
{
m_programPath = programPath;
m_logPath = logPath;
}
public void Run()
{
using (m_writer = new StreamWriter(m_logPath))
{
var process =
new Process
{
StartInfo =
new ProcessStartInfo(m_programPath)
{ RedirectStandardOutput = true, UseShellExecute = false }
};
process.OutputDataReceived += OutputDataReceived;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
}
}
private void OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine(e.Data);
m_writer.WriteLine(e.Data);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With