如何从java类调用python方法?
我在Java项目中使用Jython。
我有一个Java类: myJavaClass.java
和一个Python类: myPythonClass.py
public class myJavaClass{ public String myMethod() { PythonInterpreter interpreter = new PythonInterpreter(); //Code to write } }
Python文件如下:
class myPythonClass: def abc(self): print "calling abc" tmpb = {} tmpb = {'status' : 'SUCCESS'} return tmpb
现在问题是我想从我的Java文件的myMethod
方法调用我的Python文件的abc()
方法并打印结果。
如果我正确阅读文档 ,您可以使用eval
函数:
interpreter.execfile("/path/to/python_file.py"); PyDictionary result = interpreter.eval("myPythonClass().abc()");
或者如果你想得到一个字符串:
PyObject str = interpreter.eval("repr(myPythonClass().abc())"); System.out.println(str.toString());
如果要从Java变量中提供一些输入,可以事先使用set
而不是在Python代码中使用该变量名:
interpreter.set("myvariable", Integer(21)); PyObject answer = interpreter.eval("'the answer is: %s' % (2*myvariable)"); System.out.println(answer.toString());
如果我们需要运行一个包含参数的python函数并返回结果,我们只需要打印:
import org.python.core.PyObject; import org.python.core.PyString; import org.python.util.PythonInterpreter; public class method { public static void main(String[] args) { PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile("/pathtoyourmodule/somme_x_y.py"); PyObject str = interpreter.eval("repr(somme(4,5))"); System.out.println(str.toString()); }
somme是python模块somme_x_y.py中的函数
def somme(x,y): return x+y
没有任何方法可以做到这一点(我知道)。
但是你有几个选择:
1)从java中执行python,如下所示:
try { String line; Process p = Runtime.getRuntime().exec("cmd /c dir"); BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); while ((line = bri.readLine()) != null) { System.out.println(line); } bri.close(); while ((line = bre.readLine()) != null) { System.out.println(line); } bre.close(); p.waitFor(); System.out.println("Done."); } catch (Exception err) { err.printStackTrace(); }
2)你可以使用Jython ,它是“用Java编写的Python编程语言的一种实现”,从那里你可以有更多的运气做你想要的。
3)您可以使用套接字或共享文件以某种方式使两个应用程序通信
你可以在这里下载 Jython 2.7.0 – Standalone Jar。
然后 …
- 将此添加到eclipse中的java路径……
- 在Package Explorer(左侧)中,右键单击Java项目并选择Properties。
- 在左侧的树视图中,选择Java Build Path。
- 选择“库”选项卡。
- 选择添加外部JAR …
- 浏览到您的Jython安装(对我来说是C:\ jython2.5.2),然后选择jython.jar。
- 单击“应用”并关闭。
然后…
Java class (main) //use your won package name and python class dir ----------------- package javaToPy; import org.python.core.PyObject; import org.python.util.PythonInterpreter; public class JPmain { @SuppressWarnings("resource") public static void main(String[] args) { PythonInterpreter interpreter = new PythonInterpreter(); //set your python program/class dir here interpreter.execfile ("C:\\Users\\aman0\\Desktop\\ME\\Python\\venv\\PYsum.py"); PyObject str1 = interpreter.eval("repr(sum(10,50))"); System.out.println(str1.toString()); PyObject str2 = interpreter.eval("repr(multi(10,50))"); System.out.println(str2.toString()); interpreter.eval("repr(say())"); interpreter.eval("repr(saySomething('Hello brother'))"); } } --------------------------- Python class ------------ def sum(x,y): return x+y def multi(a,b): return a*b def say(): print("Hello from python") def saySomething(word): print(word)`enter code here`