国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

python3.x - java呼叫python,python程式碼自動(dòng)停止了,找不到原因
習(xí)慣沉默
習(xí)慣沉默 2017-06-28 09:23:50
0
3
1246
String[] args = {"python3", pythonFile};
Process process = Runtime.getRuntime().exec(args);
int exitValue = process.waitFor();
BufferedInputStream in = new BufferedInputStream(process.getInputStream());
BufferedInputStream err = new BufferedInputStream(process.getErrorStream());
BufferedReader inBr = new BufferedReader(new InputStreamReader(in));
BufferedReader errBr = new BufferedReader(new InputStreamReader(err));
String lineStr;
while ((lineStr = inBr.readLine()) != null) {
    logger.info(lineStr);
}
while ((lineStr = errBr.readLine()) != null) {
    logger.error(lineStr);
}        
inBr.close();
errBr.close();
in.close();
err.close();

呼叫python程式碼,執(zhí)行時(shí)間比較長(zhǎng),估計(jì)有好幾個(gè)小時(shí),大概五、六個(gè)小時(shí)。如果單獨(dú)直接在shell中執(zhí)行Python指令,則不會(huì)出問(wèn)題;但是,使用這種方式j(luò)ava呼叫python,就有問(wèn)題:一段時(shí)間之後,python沒(méi)有輸出了。判斷python是否正在運(yùn)行,我的方式是:不斷寫文件,每隔一段時(shí)間,寫文件到文件系統(tǒng)中。如果是直接shell中輸入python指令執(zhí)行,那麼是正常的。 java呼叫python,三個(gè)多小時(shí)之後,就沒(méi)有產(chǎn)生檔案了,但使用htop查看,執(zhí)行緒還在。運(yùn)行環(huán)境是ubuntu

習(xí)慣沉默
習(xí)慣沉默

全部回覆(3)
Peter_Zhu

對(duì)於java和python的交互,我倒是可以給你一個(gè)思路,只做參考。我之前做過(guò)一個(gè)項(xiàng)目,使用的是socket,手機(jī)端是java腳本,服務(wù)端是python,然後java向python服務(wù)端發(fā)送字串進(jìn)行交互。你可以試試。

巴扎黑

你可以去看看jython,可以在java中直接執(zhí)行python程式碼

漂亮男人

這段程式碼有個(gè)問(wèn)題:

Process process = Runtime.getRuntime().exec(args);
int exitValue = process.waitFor(); // A
... process.getInputStream() ...   // B

應(yīng)該是先處理BgetInputStream()再處理AwaitFor,因?yàn)镴ava跟它調(diào)用的程式是透過(guò)管道(pipe)通訊的,如果不及時(shí)讀取管道,被調(diào)用的程式在調(diào)用寫stdout時(shí)就有可能阻塞住。

所以正確的順序是:

Process process = Runtime.getRuntime().exec(args);
... process.getInputStream() ...   // B
... process.getErrorStream() ...   // C
int exitValue = process.waitFor(); // A

另外留下個(gè)問(wèn)題:

如果被呼叫程式先寫stderr再寫stdout,不還是會(huì)阻塞嗎? Java到底該先唸inputStream還是先唸errorStream呢?

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板