我希望在我的C#控制台应用程序中嵌入一个exe文件(特别是“python.exe”,Python 2.7的解释器),这意味着我希望用户输入命令,将解释器的输出接收到字符串变量中并使用Console .WriteLine打印输出。到目前为止我的代码是:
ProcessStartInfo processStartInfo = new ProcessStartInfo("C:/Python27/python.exe");
processStartInfo.RedirectStandardInput = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.UseShellExecute = false;
Process process = Process.Start(processStartInfo);
if (process != null)
{
while (true)
{
process.StandardInput.WriteLine(Console.ReadLine());
process.StandardInput.Close();
string output = process.StandardOutput.ReadToEnd();
Console.WriteLine(output);
}
}
我可以写“print 5”并获得正确的输出,但是当再次写入时我会收到以下错误:
无法写入已关闭的TextWriter。
我相信这个错误是因为我关闭了StandardInput,但是如果没有那行代码,我根本就得不到任何输出。我可以使用什么来向exe发送多个命令?
提前谢谢!
答案 0 :(得分:1)
请致电process.StandardInput.Flush()
。 Flush使任何缓冲的TextWriter将其所有输入都写入目的地,这就是这里发生的事情 - 您正在调用Close()
,其副作用是刷新缓冲区以及关闭流
有关详细信息,请参阅the MSDN documentation。