1.认识jython
Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。
搜索 java调用python脚本的方法首先出来的就是jython,但仔细研究jython是一门语言,可以使用java类库,也实现了python的大部分类库,但不是全部,这就是我选择runtime.exec执行python还是继续使用jython的依据。
2.pom
<dependency>
<groupId>org.python</groupId>
<artifactId>jython-standalone</artifactId>
<version>2.7.0</version>
</dependency>
3.D:\test\hello.py
def add(arr,timestamp):
return sum(arr)
4.java调用jython
执行指定py的指定方法
public Double executeHello(double[] arr,long lastTimestamp){
String pythonFile=getPath("python/hello.py");
String method="add";
//解析python
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile(pythonFile);
//调用方法
PyFunction pyFunction = interpreter.get(method, PyFunction.class);
//设置参数并获取返回值
PyObject pyobj = pyFunction.__call__(new PyArray(Double.TYPE,arr),new PyLong(lastTimestamp));
return Double.valueOf(pyobj.toString());
}
main测试
public static void main(String[] args) {
long lastTimestamp = 1628218945261l;
double[] arr = new double[]{1,2,3,5,6,7,8,9};
double num=new PythonExecutor().executeHello(arr,lastTimestamp);
System.out.printf("结果"+num);
}