Call Python from Java

痞子三分冷 提交于 2019-12-07 16:42:33

问题


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


回答1:


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.




回答2:


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:


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:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!