Win32 OS で Python 2.7 を実行していますが、プラットフォームに依存しないコードを書きたいと思っています。私が書いた Java プログラムとリアルタイムで対話するために Python を使用しようとしていますが、これを行うにはパイプを使用するのが最善の方法です。私の Python スクリプトは Java をサブプロセスとして呼び出しています。基本的に、Java は GUI であり、Python はバックエンドです。(Jython や wxPython は使いたくありません。それぞれの言語が提供する標準ライブラリに依存したいだけだからです。) 2 つの間の通信を設定しようとすると、ひどいものでした。を使用して、(親) Python スクリプトから (子) Java クラスにメッセージを送信できます。
process.stdin.write(msg)
process.stdin.flush()
しかし、Java の出力を読み取ることはできませんでした。私が使う
process.stdout.read()
しかし、読むものが何もない場合、明らかにこれは永久にブロックされます。process.communicate()
サブプロセスが終了するまで何もしないため、立ち入り禁止です。私の調査によると、この問題を回避するために人々が使用する一般的な方法は「スレッドを使用する」ことです (ただし、誰かが書き込み時に改行を追加することを提案しましたが、うまくいきませんでした)。それがどのように見えるか考えてください。標準ライブラリのsubprocess.py
ソースを調べてみましたが、役に立ちませんでした。少なくとも stdout が空かどうかを確認する方法はありますか? そうでない場合、どうすればこれを達成できますか?