.NET C# 如何监控并及时的显示另一个控制台Console的输出
2011-07-18 21:11
435 查看
这个话题已经很多前辈已经提及或者说明过,不过今天我还是来炒下冷饭.
很多人在论坛上问及,在不修改现有项目的前提下如何监控其控制台输出?
这里我们就需要用到ProcessStartInfo中的RedirectStandardOutput以及StandardOutput属性
关于StandardOutput以及RedirectStandardOutput,我不在此罗嗦,有兴趣的可以参考下MSDN:
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.processstartinfo.redirectstandardoutput(v=vs.80).aspx
而且其中微软已经给了Stream.ReadToEnd的方法来读取所有的输出.
以下的的例子中提及的是如何逐行输出以及如何及时的输出.
首先准备一个被监控的控制台进程,以下例子为逐行输出
代码如下:
其监控逐行输出代码如下:
而有些人会提及如果被监控程式非逐行输出,而其又要很及时的监控这个输出,该怎么办?
别急,看以下例子,我们只需要小小的修改一个地方,把Stream.ReadLine改成Stream.Read即可
准备一个被监控的控制台进程,以下例子为非逐行输出代码如下:
其及时监控输出代码如下:
这样就实现了及时快速的监控其他控制台程式的输出.
很多人在论坛上问及,在不修改现有项目的前提下如何监控其控制台输出?
这里我们就需要用到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(); }
这样就实现了及时快速的监控其他控制台程式的输出.
相关文章推荐
- .NET C# 如何监控并及时的显示另一个控制台Console的输出
- C# 控制台程序如何能不显示窗口
- C# 控制台程序如何能不显示窗口
- 用mingw编译C++工程;程序里面的cout<<"aaa";cmd运行c++程序,aaa内容在控制台不显示,如何将aaa输出到控制台屏幕并将控制台内容写到一个文件中。
- .Net ( C# ) 调用控制台程序并取得输出结果
- .Net ( C# ) 调用控制台程序并取得输出结果
- 如何在浏览器控制台(console)里输出彩色样式调试信息
- 如何在浏览器控制台(console)里输出彩色样式调试信息
- 如何在浏览器控制台(console)里输出彩色样式调试信息
- C# 控制台程序如何输出Messagebox
- 如何将控制台命令输出的内容显示在CEdit中
- 控制台输出颜色控制(Console 模式下的颜色显示)
- C#控制台基础 全角与半角如何切换 全角半角输出的区别
- C# 调用带参数的控制台程序 并将命令行输出的内容实时输出至窗体中的显示控件
- C#WinForm程序显示控制台窗口Console
- .Net ( C# ) 调用控制台程序并取得输出结果
- C#控制台程序输出等腰三角形并居中显示实例
- MFC(win32GUI)程序中显示Dos调试信息.console.显示控制台界面.标准输出.
- 如何把ResultSet的结果集,一表格的形式显示,或以表格的形式输出到控制台!
- C# 输出Console控制台打印的内容到文件