使用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