使用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();
为什么会这样?在此之后,当然,我再也无法与控制台应用程序通信。我究竟做错了什么?我如何正常与控制台应用程序通信?任何帮助是极大的赞赏。
答案 0 :(得分:2)
听起来像一个滑坡,我会尝试以不同的方式接近它,但如果你必须以这种方式进行互动,你或许可以尝试:
Process.StandardInput.Flush();
而不是Close();只有关闭()并在完成后处理所有内容。
答案 1 :(得分:1)
使用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