.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#控制台显示进度条

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Pro...
  • CodeSection
  • CodeSection
  • 2017年03月09日 11:03
  • 298

WPF应用程序显示控制台

注意 WPF应用程序默认情况下是不会显示控制台的,有时候我们却有着样子的需求想要显示控制台,因此以下是一种解决方法: 首先 新建一个WPF应用程序,默认有个叫做MainWindow的xaml文件...
  • hxfhq1314
  • hxfhq1314
  • 2016年09月26日 20:46
  • 1446

C++/C#控制台输入输出

C# 1.输入 (1)ReadLine() string input=Console.ReadLine();//读取一串字符,直到用户按下回车。 string input ; while ((inpu...
  • wzy0754
  • wzy0754
  • 2017年03月24日 14:29
  • 1242

console控制台

console对象代表浏览器的JavaScript控制台。虽然它还不是标准,但是各大浏览器都原生支持,已经成为事实上的标准。 console对象主要有两个作用: 显示网页代码运行时...
  • freemindhack
  • freemindhack
  • 2014年06月15日 23:11
  • 756

浏览器控制台(console对象)

目录 开发者工具 console对象 console.log方法 其他输出方法:debug,info,warn,error方法 console.table方法 console....
  • my_session
  • my_session
  • 2014年04月05日 21:37
  • 4329

Chrome 控制台新玩法-console显示图片以及为文字加样式

有兴趣的同学可以文章最后的代码复制贴到控制台玩玩。 Go for Code   在正常模式下,一般只能向console 控制台输出简单的文字信息。但为了把信息输出得更优雅更便于阅读,除了cosole....
  • symbian007
  • symbian007
  • 2014年12月29日 22:23
  • 2443

Unity 实现Log实时输出到屏幕或控制台上<二>

第一部分博客链接:http://blog.csdn.net/cartzhang/article/details/49818953 一、你还是想要一个控制台来显示信息?     为什么呢?这样就不会...
  • cartzhang
  • cartzhang
  • 2015年11月17日 11:13
  • 9920

C#之WinForm基础 winform中用到控制台的consol.writeline,在哪里可以看到效果

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 0、在哪里可以看到 在这里可以打开, 1、UI ...
  • yushaopu
  • yushaopu
  • 2016年09月21日 18:11
  • 3204

不得不说的Firebug(二):Firebug——控制台(Console)

本篇博文打算总结一下Firebug中的控制台这一个Tab,控制台(Console)是Firebug的第一个面板,也是最重要的面板,主要作用是显示网页加载过程中产生各类信息。...
  • u013228403
  • u013228403
  • 2014年07月31日 22:55
  • 2182

C#控制台基础 用户不断输入直到输入exit 退出循环或是退出控制台

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 基础版 using System; using System.Collec...
  • yushaopu
  • yushaopu
  • 2016年08月29日 09:28
  • 4235
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.NET C# 如何监控并及时的显示另一个控制台Console的输出
举报原因:
原因补充:

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