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();
Panggil kod python, masa pelaksanaan agak lama, dianggarkan beberapa jam, kira-kira lima atau enam jam. Jika anda melaksanakan perintah Python secara langsung dalam shell sahaja, tidak akan ada masalah, namun, jika anda menggunakan java untuk memanggil python dengan cara ini, akan ada masalah: selepas tempoh masa, python tidak akan mempunyai output. Cara saya untuk menentukan sama ada python sedang berjalan adalah dengan terus menulis fail, dan sekali-sekala, tulis fail ke sistem fail. Jika anda memasukkan arahan python terus ke dalam shell, ia adalah perkara biasa. Java memanggil python Selepas lebih daripada tiga jam, tiada fail dijana, tetapi menggunakan htop untuk menyemak, benang itu masih ada. Persekitaran berjalan adalah ubuntu
Mengenai interaksi antara java dan python, saya boleh memberi anda idea, hanya untuk rujukan. Saya telah melakukan projek sebelum ini, menggunakan soket, terminal mudah alih ialah skrip java, pelayan adalah python, dan kemudian java menghantar rentetan ke pelayan python untuk interaksi. Anda boleh mencubanya.
Anda boleh menyemak jython, yang boleh terus melaksanakan kod python dalam java
Ada masalah dengan kod ini:
hendaklah diproses terlebih dahulu B
getInputStream()
dan kemudiangetInputStream()
再处理AwaitFor
AwaitFor
, kerana Java berkomunikasi dengan program yang dipanggilnya melalui paip Jika tidak Dengan membaca paip dalam masa, program yang dipanggil mungkin menyekat semasa menulis ke stdout.inputStream
还是先读errorStream
Jika atur cara yang dipanggil menulis ke stderr dahulu dan kemudian ke stdout, adakah ia masih akan menyekat? Patutkah anda membaca Java dahulu