Redirect but also display process output stream

后端 未结 3 1260
-上瘾入骨i
-上瘾入骨i 2020-12-20 23:47

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 c

3条回答
  •  时光说笑
    2020-12-21 00:10

    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);
        }
    }
    

提交回复
热议问题