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

本文关键字:命令 应用程序 控制台 | 更新日期: 2023-09-27 18:27:53

使用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();

为什么会这样?当然,在这之后,我就不能再和控制台应用程序通信了。我做错了什么?如何正常与控制台应用程序通信?非常感谢您的帮助。

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

听起来像是一个滑坡,我会尝试用不同的方式来处理它,但如果你必须以这种方式进行交互,你也许可以尝试:

Process.StandardInput.Flush();

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

如中所述使用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