ejecutar desde conectar con java process ioexception createprocess python-2.5

desde - conectar java con python



Llamar a Python desde Java (4)

Quiero llamar a un script de python desde Java. Mi versión de Python es 2.5 y Java es 6.

Mi código actual:

try{ Process p= Runtime.getRuntime().exec("path/dirs/file.py"); p.waitFor(); } catch (InterruptedException ex){ System.out.println(ex.getMessage());} }

El error que recibo es:

Java.IO.IOException: No se puede ejecutar el nombre de archivo del programa: CreateProcess error = 193,% 1 no es una aplicación Win32 válida


Intenta usar PrecessBuilder -

try{ String prg = "import sys/nprint int(sys.argv[1])+int(sys.argv[2])/n"; BufferedWriter out = new BufferedWriter(new FileWriter("test1.py")); out.write(prg); out.close(); int number1 = 10; int number2 = 32; ProcessBuilder pb = new ProcessBuilder("python","test1.py",""+number1,""+number2); Process p = pb.start(); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); int ret = new Integer(in.readLine()).intValue(); System.out.println("value is : "+ret); }catch(Exception e){System.out.println(e);}

Vea aquí de más detalles.


La forma más fácil de integrar una aplicación Java con Python es usar Jython .

He utilizado esto con éxito en el pasado para crear aplicaciones java scripttables antes de que tuviéramos acceso a Nashorn y eso es lo mismo.


Puede ejecutar solo un ejecutable de Windows como un archivo EXE o BAT utilizando la función Runtime.exec. Necesita encontrar una forma de instanciar el intérprete de Python y luego dar el nombre del archivo usando un archivo .BAT.


prueba esto, esto funciona para mí

test_python.py

def addition(a,b): c=a+b return(c)

interpreterPython.java

package com.pythonconnect; import org.python.util.PythonInterpreter; public class interpreterPython { public static void main(String[] args) { System.setProperty("python.cachedir.skip", "true"); PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile("test_python.py"); interpreter.exec("print(addition(7,8))"); } }