0

我正在组装一个多语言系统,但遇到了孤立进程的问题。

我的代码由一个调用 Java 程序的 Python 程序组成,两个程序之间通过管道通信;Java 程序是持久的,而不仅仅是一次性运行。一切正常,但如果 Python 程序过早退出,我需要关闭 Java 程序。

认为最好的方法是让 Java 程序在无法检测到程序之间的标准输入管道时自行关闭,但我不知道该怎么做。

相关Python代码:

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

相关Java代码;如果程序无法从标准输入中读取,我希望程序退出,但我认为 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 回答