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

python3.x - Java appelle python, le code python s'arrête automatiquement et la raison est introuvable
習(xí)慣沉默
習(xí)慣沉默 2017-06-28 09:23:50
0
3
1248
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();

Appelez le code python, le temps d'exécution est relativement long, il est estimé à plusieurs heures, environ cinq ou six heures. Si vous exécutez la commande Python directement dans le shell seul, il n'y aura aucun problème ; cependant, si vous utilisez Java pour appeler python de cette manière, il y aura un problème : après un certain temps, python n'aura aucune sortie. Ma fa?on de déterminer si Python est en cours d'exécution consiste à écrire des fichiers en continu et, de temps en temps, à écrire des fichiers sur le système de fichiers. Si vous entrez la commande python directement dans le shell, c'est normal. Java appelle python Après plus de trois heures, aucun fichier n'est généré, mais en utilisant htop pour vérifier, le thread est toujours là. L'environnement d'exécution est Ubuntu

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

répondre à tous(3)
Peter_Zhu

Concernant l'interaction entre java et python, je peux vous donner une idée, juste à titre de référence. J'ai déjà réalisé un projet, en utilisant socket, le terminal mobile est un script Java, le serveur est Python, puis Java envoie des cha?nes au serveur Python pour interaction. Vous pouvez l'essayer.

巴扎黑

Vous pouvez consulter jython, qui peut exécuter directement du code python en java

漂亮男人

Il y a un problème avec ce code?:

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

Il doit être traité en premierBgetInputStream() puis getInputStream()再處理AwaitForA

waitFor, car Java communique avec le programme qu'il appelle via un tube sinon en lisant le. pipe à temps, le programme appelé peut se bloquer lors de l'écriture sur la sortie standard.

Donc, l'ordre correct est?:

Process process = Runtime.getRuntime().exec(args);
... process.getInputStream() ...   // B
... process.getErrorStream() ...   // C
int exitValue = process.waitFor(); // A
Laissez une autre question?:

inputStream還是先讀errorStreamSi le programme appelé écrit d'abord sur stderr puis sur stdout, ne bloquera-t-il pas quand même ? Devriez-vous d’abord lire Java

?? ??
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal