我想从控制台模式子进程读取输出

时间:2011-03-18 16:07:02

标签: c# java c++ c

我正在尝试更新1995年用pascal或c编写的程序。我不确定编程语言。命令行程序。现在我用C#编码。我想阅读子程序输出。有可能吗?

我试了一下。但没有成功。他们是:

    private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
    {
        // Redirect the output stream of the child process.
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = "asdd.exe";
        p.Start();


        logs.AppendText("Timer Started\n");
        timer1.Enabled = true;


    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        // write somethingg and read what is the program doing on command line?
        // What is the program printint? etc... 
        // I try this code but not enough for mo. 
        // logs.AppendText("d:" + p.StandardOutput.ReadToEnd()+"\n");

    }

    private void p_Exited(object sender, EventArgs e)
    {
        timer1.Enabled = false;
    }

我对java,cpp,c或c#中的任何想法持开放态度。

编辑:

例如:

我的asdd.exe程序源代码是

#include<stdio.h>

int main(){
    printf("something\n");
    printf("something, too\n");
}

此程序调用C#和日志richTextBox附加:

something
something, too

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

在子程序结束之前,

ReadToEnd不会返回任何数据。如果要在程序运行时查看输出,则可能需要一次读取一行或甚至一次读取一个字符。

答案 2 :(得分:0)

这就是我通常从单独的过程中读取的内容。现在这将阻止当前线程,直到处理完成,所以我使用后台线程。

process.StartInfo.FileName = "program.exe"
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

process.Start();

process.StandardInput.WriteLine(data);

string result = process.StandardOutput.ReadToEnd();

process.WaitForExit();

答案 3 :(得分:0)

这篇MSDN文章似乎正是您所寻找的。

Creating a Child Process with Redirected Input and Output