0

多言語システムをまとめていますが、孤立したプロセスで問題が発生しています。

私のコードは、Javaプログラムを呼び出すPythonプログラムで構成されており、2つのプログラム間でパイプ通信が行われます。Javaプログラムは、1回限りの実行ではなく、永続的です。すべてが正常に機能していますが、Pythonプログラムが途中で終了した場合は、Javaプログラムを閉じる必要があります。

これを行う最善の方法は、プログラム間のstdinパイプを検出できない場合に、Javaプログラムを閉じることだと思いますが、これを行う方法がわかりません。

関連するPythonコード:

javaInterface = subprocess.Popen(["pathtojavaprogram"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

関連するJavaコード。stdinから読み取れない場合はプログラムを終了したいのですが、readLine()関数のブロッキングの問題が発生していると思います。

String stdinStr = "";
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

while(true){
    try{
        stdinStr = stdin.readLine();
    }
    catch(java.lang.Exception e){
        System.exit(0);
    }
    //Do stuff with the stdinStr data
}
4

1 に答える 1

0

これは真実性によるコメントで答えられました、しかし私はこれを答えられたものとしてマークしたかったです。

パイプが出るたびにreadLine()関数が戻るnullので、それをチェックすることでサブプロセスを適切に閉じることができます。

于 2012-06-12T21:24:50.553 に答える