无法向控制台应用程序发送多个命令
问题描述:
使用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();
,而不是关闭();只有关闭()并在你完成完成后处置所有内容。
答
如描述使用一个StreamWriter:
当产生两个控制台应用程序,一个用下面的代码:
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
我试过了。它不起作用。我在某处读到它只与输出流有关。 – Peter17 2012-03-13 20:16:25
但我没有完全可以完成的时刻。我需要不断地与程序进行交流(这是一个外部SIP呼叫者)。 – Peter17 2012-03-13 20:19:00
我还没有完全按照你的意思去做,但理论上它应该工作,并写入标准输入。 http://msdn.microsoft.com/en-us/library/system.io.streamwriter.flush.aspx例如,如果我们正在写入文件流,调用flush将确保立即写入缓冲区中的任何内容。 – mikey 2012-03-13 20:22:21