I want to call a python
script from Java. My python version is 2.5 and Java is 6.
My current code:
try{
Process p= Runtime.getRuntime().exec("path/dirs/file.py");
p.waitFor();
} catch (InterruptedException ex){
System.out.println(ex.getMessage());}
}
The error I receive is:
Java.IO.IOException: Cannot run program filename: CreateProcess error = 193, %1 is not a valid Win32 application
Try to use 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);}
See here from more detail.
You can run only a windows executable like a EXE or BAT file using the Runtime.exec function. You need to find a way to instantiate the Python interpreter and then give the file name using a .BAT File.
try this, This works for me
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))");
}
}
来源:https://stackoverflow.com/questions/31674122/call-python-from-java