1

Python プロセスを起動する Java アプリケーションがあります。Python プロセスはソケットを開き、そこに送信される受信データをリッスンします。Python は、Java アプリが読み取れるようにする必要がある、その存続期間全体にわたって画面に出力します。私のJavaコードは次のとおりです。

Runtime runTime = Runtime.getRuntime();
Process proc = runTime.exec(command, null, dir);
reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while ((line = reader.readLine()) != null) 
{
    System.out.println(line);
}

これは一般的には機能しますが、Python ソケットをリッスンするとすぐに、入力ストリームを受信しなくなります。以下に示すように、Python スクリプト内で receive をコメント アウトすると、Java アプリケーションは両方のプリントを受け取ります。

print "socket waiting to receive"
#data, addr = sock.recvfrom(self.BUFFER_SIZE) # this line causing problems
print "socket received data"

receive のコメントを外すと、Java 内で何も印刷されなくなります。ブロッキング recvfrom ステートメントの前に発生する印刷も取得しません。コマンドラインからスクリプトを直接実行すると、「受信を待機しているソケット」が表示され、データを受信するたびに「ソケット受信データ」が表示されます。

4

0 に答える 0