.NET C# 如何监控并及时的显示另一个控制台Console的输出

原创 2011年07月18日 21:11:25

    这个话题已经很多前辈已经提及或者说明过,不过今天我还是来炒下冷饭.

很多人在论坛上问及,在不修改现有项目的前提下如何监控其控制台输出?

这里我们就需要用到ProcessStartInfo中的RedirectStandardOutput以及StandardOutput属性

关于StandardOutput以及RedirectStandardOutput,我不在此罗嗦,有兴趣的可以参考下MSDN:

http://msdn.microsoft.com/zh-cn/library/system.diagnostics.processstartinfo.redirectstandardoutput(v=vs.80).aspx

而且其中微软已经给了Stream.ReadToEnd的方法来读取所有的输出.

以下的的例子中提及的是如何逐行输出以及如何及时的输出.

首先准备一个被监控的控制台进程,以下例子为逐行输出

代码如下:

        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Testing in :" + DateTime.Now.ToString());
                System.Threading.Thread.Sleep(50);
            }
            
        }

其监控逐行输出代码如下:

        static void Main(string[] args)
        {
            StreamReader sr;
            ProcessStartInfo s = new ProcessStartInfo();
            s.RedirectStandardInput = true;
            s.RedirectStandardOutput = true;
            s.UseShellExecute = false;
            s.FileName = @"d:\OutputRepeat.exe";
            Process p = Process.Start(s);
            sr = p.StandardOutput;
            while (!sr.EndOfStream)
            {
                string str = sr.ReadLine();
                Console.WriteLine(str);
            }
            p.WaitForExit();
            p.Close();
        }


而有些人会提及如果被监控程式非逐行输出,而其又要很及时的监控这个输出,该怎么办?

别急,看以下例子,我们只需要小小的修改一个地方,把Stream.ReadLine改成Stream.Read即可


准备一个被监控的控制台进程,以下例子为非逐行输出

代码如下:

        static void Main(string[] args)
        {
            while (true)
            {
                Console.Write("Testing in :" + DateTime.Now.ToString());
                System.Threading.Thread.Sleep(50);
            }
            
        }

其及时监控输出代码如下:

        static void Main(string[] args)
        {
            StreamReader sr;
            ProcessStartInfo s = new ProcessStartInfo();
            s.RedirectStandardInput = true;
            s.RedirectStandardOutput = true;
            s.UseShellExecute = false;
            s.FileName = @"E:\CSharp\OutputRepeat\bin\Release\OutputRepeat.exe";
            Process p = Process.Start(s);
            sr = p.StandardOutput;
            while (!sr.EndOfStream)
            {
                char[] bs = new char[16];
                int i = sr.Read(bs, 0, 16);
                foreach (char o in bs)
                {
                    Console.Write(o);
                }
            }
            p.WaitForExit();
            p.Close();
        }

这样就实现了及时快速的监控其他控制台程式的输出.

用C#实现获取控制台应用程序的显示结果

  • 2008年11月14日 08:37
  • 21KB
  • 下载

C# 控制台输出与读取

输入输出字符串Console.WriteLine("哈喽!");输出显示若干个项:Console.WriteLine(" {0}{1}年.", str, year);读取在C#控制台程序中提供了两种方...
  • GrandShaw
  • GrandShaw
  • 2016-11-03 14:08:00
  • 2598

.NET C# 如何监控并及时的显示另一个控制台Console的输出

这个话题已经很多前辈已经提及或者说明过,不过今天我还是来炒下冷饭.很多人在论坛上问及,在不修改现有项目的前提下如何监控其控制台输出?这里我们就需要用到ProcessStartInfo中的Redirec...
  • lost_painting
  • lost_painting
  • 2011-07-18 21:11:25
  • 4867

Windows程序使用控制台输出监视的变量(原来这样也可以)

Windows程序进行调试进行变量监视的时候,一般通过监视窗口进行,但是这样有时候切来切去很麻烦,今天向同学请教发现了一种可以用控制台监测变量的方法。 只需#include #include /...
  • gukesdo
  • gukesdo
  • 2011-08-20 11:37:25
  • 1494

.Net开发:1.打印信息输出至Console

1. 设置输出窗口文本重定向到即时窗口2. C#使用调试语句System.Console.WriteLine("Hello world!");输出 Hello world!...
  • u012812482
  • u012812482
  • 2016-05-02 09:52:23
  • 2602

c# .net mvc5 Console.WriteLine控制台没有输出

解决办法: 使用System.Diagnostics.Debug.WriteLine(...) 一般使用和Console.WriteLine差不多。...
  • hzh_csdn
  • hzh_csdn
  • 2016-11-20 20:20:09
  • 3774

分布式日志收集框架Flume:监控一个文件实时采集新增的数据输出到控制台

前提:主机上的其他的配置都已经完成,很重要的一点是/etc/hosts路径文件下的ip要是你当前使用的ip Agent选型:exec source + memory channel +log...
  • txgANG
  • txgANG
  • 2018-01-23 16:51:53
  • 219

Flume的使用之二——实时监控文件的数据变化并发送到工作台

1.写配置文件 agent:exec source + memory channel + logger sink a1.sources = r1 a1.sinks = k1 a1.chan...
  • BornZhu
  • BornZhu
  • 2017-11-22 11:17:16
  • 142

ConsoleApplication也精彩,一个控制台进度条的示例。

这年头记得习惯用ConsoleApplication的人恐怕也没有多少了,系统工具无论巨细,一律拖个巨大的form出来..其实控制台,写得好点也是很有趣的,比如这个效果下面代码演示了如何在控制台下展示...
  • jinjazz
  • jinjazz
  • 2008-05-12 21:54:00
  • 9255

.net core 控制台输出乱码问题

.net core 控制台输出中文的时候可能会出现乱码情况 原因是 序的编码和操作系统的编码不一致 这时需要指定 输出编码 如: Console.OutputEncoding = Encodi...
  • MeGoodtoo
  • MeGoodtoo
  • 2017-06-17 16:57:49
  • 653
收藏助手
不良信息举报
您举报文章:.NET C# 如何监控并及时的显示另一个控制台Console的输出
举报原因:
原因补充:

(最多只允许输入30个字)