3

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に送信するには何を使用できますか?

前もって感謝します!

4

1 に答える 1

1

process.StandardInput.Flush()代わりに電話してください。Flush は、バッファリングされた TextWriter にすべての入力を宛先に書き込みます。これがここで起こっていることです。呼び出しClose()ていると、バッファがフラッシュされ、ストリームが閉じられるという副作用があります。

詳細については、MSDN のドキュメントを参照してください。

于 2012-07-23T20:15:11.420 に答える