none
C# 定时捕获控制台的输出信息 RRS feed

  • 问题

  • 控制台上一值有信息输出来,想要做的是,每个几分钟或十几分钟就获取一下输出的信息。
    2013年8月12日 5:58

答案

  • 你好!

    如果你是使用Console Application开发的控制台程序的话,比较简单的做法是在Console.Write的同时也将输出信息存入到一个StringBuilder中,隔一段时间之后获取一下StringBuilder内容,或者写入到文件中,隔一段时间读取一下该文件的内容。通常控制台程序打印出来的都是日志信息,用一些日志记录工具比如Log4NET/NLog可以同时打印到控制台窗口和文件中。定时去读取日志文件内容就可以了。

    如果你是使用Process启动的一个cmd窗口执行一个程序的话,可以通过控制process.StartInfo.RedirectStandardOutput标准输出流来读取输出内容,将读取的内容保存到StringBuilder或者文件中,然后定时取值就可以了。这里有一个来自网络的示例代码:

    /// <summary>
            /// 给控制台输入命令及获取控制台输出
            /// </summary>
            /// <param name="command">命令集合</param>
            /// <returns></returns>
            private string[] RunCmd(string[] command)
            {
                Process process = new Process();
                process.StartInfo.FileName = "cmd.exe"; // Run this program  
                process.StartInfo.UseShellExecute = false; // Must be false  
                process.StartInfo.RedirectStandardInput = true; // Redirect input stream  
                process.StartInfo.RedirectStandardOutput = true; // Redirect output stream  
                process.StartInfo.RedirectStandardError = true; // Redirect error stream  
                process.StartInfo.CreateNoWindow = true; // All commands run in one window  
                process.Start();
                StreamWriter sw = process.StandardInput;
                sw.AutoFlush = true;
                StreamReader srout = process.StandardOutput;
                StreamReader srerr = process.StandardError;
                for (int i = 0; i < command.Length; i++)
                {
                    sw.WriteLine(command[i]);
                }
                sw.Close();
                string[] output = new string[2];
                output[0] = srout.ReadToEnd();
                output[1] = srerr.ReadToEnd();
                srerr.Close();
                srout.Close();
                process.WaitForExit();
                process.Close();
                return output;
            }
    希望可以帮到你。谢谢。

    Caillen
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年8月13日 6:43
    版主

全部回复

  • 你好!

    如果你是使用Console Application开发的控制台程序的话,比较简单的做法是在Console.Write的同时也将输出信息存入到一个StringBuilder中,隔一段时间之后获取一下StringBuilder内容,或者写入到文件中,隔一段时间读取一下该文件的内容。通常控制台程序打印出来的都是日志信息,用一些日志记录工具比如Log4NET/NLog可以同时打印到控制台窗口和文件中。定时去读取日志文件内容就可以了。

    如果你是使用Process启动的一个cmd窗口执行一个程序的话,可以通过控制process.StartInfo.RedirectStandardOutput标准输出流来读取输出内容,将读取的内容保存到StringBuilder或者文件中,然后定时取值就可以了。这里有一个来自网络的示例代码:

    /// <summary>
            /// 给控制台输入命令及获取控制台输出
            /// </summary>
            /// <param name="command">命令集合</param>
            /// <returns></returns>
            private string[] RunCmd(string[] command)
            {
                Process process = new Process();
                process.StartInfo.FileName = "cmd.exe"; // Run this program  
                process.StartInfo.UseShellExecute = false; // Must be false  
                process.StartInfo.RedirectStandardInput = true; // Redirect input stream  
                process.StartInfo.RedirectStandardOutput = true; // Redirect output stream  
                process.StartInfo.RedirectStandardError = true; // Redirect error stream  
                process.StartInfo.CreateNoWindow = true; // All commands run in one window  
                process.Start();
                StreamWriter sw = process.StandardInput;
                sw.AutoFlush = true;
                StreamReader srout = process.StandardOutput;
                StreamReader srerr = process.StandardError;
                for (int i = 0; i < command.Length; i++)
                {
                    sw.WriteLine(command[i]);
                }
                sw.Close();
                string[] output = new string[2];
                output[0] = srout.ReadToEnd();
                output[1] = srerr.ReadToEnd();
                srerr.Close();
                srout.Close();
                process.WaitForExit();
                process.Close();
                return output;
            }
    希望可以帮到你。谢谢。

    Caillen
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年8月13日 6:43
    版主
  • 你应该把你的需求简单的描述下,或许定时捕获是你自己想出来的解决方案,但是可能好的解决方案并不需要你去定时捕获。
    2013年8月13日 6:48