我正在组建一个多语言系统,但遇到了孤立进程的问题。
我的代码包含一个调用Java程序的Python程序,在两个程序之间进行管道通信; Java程序是持久的,而不仅仅是一次性运行。一切都工作正常,但如果Python程序过早退出,我需要关闭Java程序。
我认为这样做的最好方法是让Java程序自动关闭,如果它无法检测程序之间的stdin管道,但我无法理解这样做。
相关的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
}
答案 0 :(得分:0)
这在trutheality的评论中得到了回答,但我想将此标记为已回答。
每当管道退出时,readLine()
函数都会返回null
,因此检查它可以让您正确关闭子流程。