Mono (Ubuntu) で実行されている C# プログラムで Python スクリプトを呼び出し、データを stdin に送信し、stdout からデータを読み取ろうとしています。以下のテスト コードは、本質的なアイデアを捉えています。
var startInfo = new ProcessStartInfo("python");
startInfo.Arguments = "./hello.py";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
var p = Process.Start(startInfo);
if(p.HasExited)
return;
p.StandardInput.WriteLine("Bob");
var result = p.StandardOutput.ReadLine();
Console.WriteLine("Result: {0}", result);
hello.py のコードは次のとおりです。
#!/usr/bin/python
line = raw_input()
while len(line) > 0:
print("Hello " + line)
line = raw_input()
このテスト コードを .NET/Windows で実行すると、上記のテストは期待どおりに機能し、"Hello Bob" という結果が返されます。しかし、Mono/Linux では、C# プログラムは への呼び出しでハングしますp.StandardOutput.ReadLine();
。Mono/Linux で動作しない理由と、動作させるために何を変更する必要があるかについて何か考えはありますか?