Call Python from Java

2019-01-26 20:23发布

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

4条回答
劫难
2楼-- · 2019-01-26 20:45

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.

查看更多
孤傲高冷的网名
3楼-- · 2019-01-26 20:47

The easiest way to integrate a Java application with Python is to use Jython.

I have used this successfully in the past to build scriptable java applications before we had access to Nashorn and it's ilk.

查看更多
我欲成王,谁敢阻挡
4楼-- · 2019-01-26 20:54

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))");
    }
}
查看更多
forever°为你锁心
5楼-- · 2019-01-26 21:07

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.

查看更多
登录 后发表回答