无法向控制台应用程序发送多个命令

时间:2012-03-13 20:13:08

标签: c# .net process stream console

使用Process类与控制台应用程序通信时遇到问题。

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"consoleApp.exe";        
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
Process = Process.Start(psi);
Process.BeginOutputReadLine();

我需要的是编写命令来控制,检索答案,回复它们。但是,只有在我关闭流时,发送到控制台的命令才有效:

Process.StandardInput.WriteLine("command");
Process.StandardInput.Close();

为什么会这样?在此之后,当然,我再也无法与控制台应用程序通信。我究竟做错了什么?我如何正常与控制台应用程序通信?任何帮助是极大的赞赏。

2 个答案:

答案 0 :(得分:2)

听起来像一个滑坡,我会尝试以不同的方式接近它,但如果你必须以这种方式进行互动,你或许可以尝试:

Process.StandardInput.Flush();

而不是Close();只有关闭()并在完成后处理所有内容。

答案 1 :(得分:1)

使用StreamWriter,如下所述:

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardinput.aspx

创建两个控制台应用程序时,使用以下代码:

class Program
{
    static void Main(string[] args)
    {
        var n = 0;
        while (n < 5)
        {
            var line = Console.ReadLine();
            Console.WriteLine("Read line {0}: {1}", n, line);
            n++;
        }
    }
}

以及以下内容之一:

class Program
{
    static void Main(string[] args)
    {
        Process myProcess = new Process();

        myProcess.StartInfo.FileName = "ConsoleApplication1.exe";
        myProcess.StartInfo.UseShellExecute = false;
        myProcess.StartInfo.RedirectStandardInput = true;

        myProcess.Start();

        StreamWriter myStreamWriter = myProcess.StandardInput;

        var n = 0;
        while (n < 5)
        {
            myStreamWriter.WriteLine("line" + n.ToString());
            n++;
        }

        myStreamWriter.Close();
    }
}

结果是:

Read line 0: line0
Read line 1: line1
Read line 2: line2
Read line 3: line3
Read line 4: line4