java jython调用python脚本

python | 2021-08-12 09:00:49

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);

    }

 

 

 

登录后即可回复 登录 | 注册
    
关注编程学问公众号