.NET上控制台输出的实时截取

原创 2007年09月25日 12:27:00
.NET上控制台输出的实时截取

.NET上控制台输出的实时截取分两种不同的情况:截取子进程的输出和截取当前进程的输出。

截取子进程的输出可以使用Process.StandardOutput属性取得一个StreamReader,并用它来读取输出。注意读取操作是阻塞的,可以使用异步方法调用或者Process.BeginOutputReadLine()来进行异步读取。例子如下:

Process p = new Process();
p.StartInfo.UseShellExecute = false; // 必须
p.StartInfo.RedirectStandardOutput = true; // 必须
p.StartInfo.FileName = "SomeApp.exe";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();

截取当前进程的输出可以使用Console.SetOut()。使用这种方法需要从TextWriter派生一个类,用于接收输出。但这个方法有个缺陷,就是只能截获Console类的输出,而对非托管的C运行库printf的输出不起作用。哪位高人知道解决方法的话望赐教。例子如下:

Console.SetOut(new TextBoxWriter(textBox1));

class TextBoxWriter : TextWriter
{
    TextBox textBox;
    delegate void WriteFunc(string value);
    WriteFunc write;
    WriteFunc writeLine;

    public TextBoxWriter(TextBox textBox)
    {
        this.textBox = textBox;
        write = Write;
        writeLine = WriteLine;
    }

    // 使用UTF-16避免不必要的编码转换
    public override Encoding Encoding
    {
        get { return Encoding.Unicode; }
    }

    // 最低限度需要重写的方法
    public override void Write(string value)
    {
        if (textBox.InvokeRequired)
            textBox.BeginInvoke(write, value);
        else
            textBox.AppendText(value);
    }

    // 为提高效率直接处理一行的输出
    public override void WriteLine(string value)
    {
        if (textBox.InvokeRequired)
            textBox.BeginInvoke(writeLine, value);
        else
        {
            textBox.AppendText(value);
            textBox.AppendText(this.NewLine);
        }
    }
}
 

.NET上控制台输出的实时截取

.NET上控制台输出的实时截取分两种不同的情况:截取子进程的输出和截取当前进程的输出。截取子进程的输出可以使用Process.StandardOutput属性取得一个StreamReader,并用它来...
  • andylaufzf
  • andylaufzf
  • 2007年09月26日 10:44
  • 411

Java程序中截获控制台输出

本文的目标是设计一个基于Swing的JTextArea显示控制台输出。此期间,我们还将讨论一些和Java管道流(PipedInputStream和PipedOutputStream)有关的注意事项。最...
  • rgq562248600
  • rgq562248600
  • 2012年10月25日 16:15
  • 1209

ASP.NET中的控制台输出

 以前做.NET winform的时候,一直都是用 Console.Write向控制台输出信息的,这次做web的时候,发现这个语句用不了。查了一下资料,才发现web程序执行时,是被附加到IIS进程的一...
  • jok127
  • jok127
  • 2009年11月29日 19:14
  • 13723

Java程序实现捕获控制台输出的程序

import java.io.*;public class test{ public static void main(String []args)throws Exception{ ...
  • u014028392
  • u014028392
  • 2017年04月28日 11:06
  • 301

C#控制台的输入和输出-Console类-输出到控制台

C# 控制台程序一般使用 .NET Framework Console 类提供的输入/输出服务。我们多次用到Console.WriteLine方法,我们再学习一些其他的方法。输出到控制台输出到控制台就...
  • david_520042
  • david_520042
  • 2010年11月22日 10:25
  • 2192

Xcode8 解决控制台输出

做一个记录~
  • sinat_30162391
  • sinat_30162391
  • 2016年09月18日 21:44
  • 2503

在Delphi中捕获控制台程序的输出

本文实现了在Delphi中运行控制台程序,并将控制台程序的输出在Memo控件中显示出来。工作中需要手工编译J2ME的程序,开始编写了一个批处理程序,但是感觉使用中非常繁琐,于是想用Delphi做一个集...
  • sunbn
  • sunbn
  • 2002年06月19日 09:01
  • 830

linux tomcat 实时查看控制台输出

tomcat/bin目录  ./catalina.sh run #前台运行tomcat  ./startup.sh 后台运行 ./catalina.sh stop #前台停止tomcat ./shut...
  • XIIX
  • XIIX
  • 2010年08月18日 15:17
  • 1009

在asp.net 下 控制台输出

以前做.NET winform的时候,一直都是用 Console.Write向控制台输出信息的,这次做web的时候,发现这个语句用不了。查了一下资料,才发现web程序执行时,是被附加到IIS进程的一个...
  • mosquitofree
  • mosquitofree
  • 2010年05月30日 16:55
  • 385

windows下tomcat输出控制台日志文件

windows下tomcat输出控制台日志文件windows服务器情况下,无法和linux服务器一样,启动web服务之后,直接tail查看日志,而windwos控制台的输出空间有限,如果遇到大量错误的...
  • qq_28938933
  • qq_28938933
  • 2017年08月07日 15:16
  • 391
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.NET上控制台输出的实时截取
举报原因:
原因补充:

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