2

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 で動作しない理由と、動作させるために何を変更する必要があるかについて何か考えはありますか?

4

1 に答える 1

1

私自身の質問に答える...これはMonoやLinuxとは関係がなく、WindowsとLinuxでのPythonの動作とは関係がないことがわかりました。Linuxで動作させるには、-uフラグ(バッファなしの出力)を使用してPythonを呼び出す必要があります。これにより、印刷されたデータが実際にstdoutにフラッシュされます。ヒントについては、Monoメーリングリストの「weeble」に感謝します。

于 2013-02-05T16:50:28.067 に答える