[置顶]NET C#は、別のコンソールコンソールコンソールの出力を監視し、タイムリーに表示する方法
この話題はすでに多くの先輩が言及したり説明したりしていますが、今日は冷たいご飯を炒めに来ました.
多くの人がフォーラムで、既存のプロジェクトを変更せずにコンソールの出力をどのように監視するかを尋ねています.
ここでは、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でOK
監視されたコンソールプロセスを準備します.次の例は非逐行出力です.
コードは次のとおりです.
そのタイムリーな監視出力コードは以下の通りである.
これにより、他のコンソールプログラムの出力をタイムリーかつ迅速に監視することができる.
多くの人がフォーラムで、既存のプロジェクトを変更せずにコンソールの出力をどのように監視するかを尋ねています.
ここでは、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でOK
監視されたコンソールプロセスを準備します.次の例は非逐行出力です.
コードは次のとおりです.
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();
}
これにより、他のコンソールプログラムの出力をタイムリーかつ迅速に監視することができる.