在C#控制台中嵌入exe文件?

时间:2012-07-23 20:10:36

标签: c# python console exe embedding

我希望在我的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发送多个命令?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

请致电process.StandardInput.Flush()。 Flush使任何缓冲的TextWriter将其所有输入都写入目的地,这就是这里发生的事情 - 您正在调用Close(),其副作用是刷新缓冲区以及关闭流

有关详细信息,请参阅the MSDN documentation

相关问题