经过调研,目前这应该只有一种调用方式了,那就是使用jep,后来亲测了以下确实是可行,我是使用jep调用了一个python文件中的类,并测试了类的一个方法,可以正常执行,但是具体速度会不会慢很多,我还没有测试。
刚开始在调研的时候,说jython也可以调用,但是这个包只支持2.7python,毕竟现在很少有用2.7的了,所以转2.7就比较麻烦,甚至有可能无法实现。
关于jep的使用,首先需要强调的是,jep是使用pip安装的,我刚开始在想java使用为什么要使用pip安装(pip install jep ),https://github.com/ninia/jep,原来这种安装方式会创建python包,和java的jar包,在两个语言中都可以互相调用。
关于jep的安装需要gcc,java,要配置好JAVA_HOME
安装好jep以后,调用方式为:
import jep.*; public class test_2 { public static void main(String[] args) { try (Interpreter interp = new SharedInterpreter()) { interp.exec("from java.lang import System"); interp.exec("s = 'Hello World'"); interp.exec("System.out.println(s)"); interp.exec("print(s)"); interp.exec("print(s[1:-1])"); } catch (Exception e) { e.printStackTrace(); } } }
//注意,exec中可以直接按照python的代码来写就行了,另外还有别的写法,官方还给出了其他的类调用方法,可以自行尝试,在这里https://github.com/ninia/jep/wiki/Getting-Started
最后将上述代码保存为test_2.java
编译:javac -cp jep-版本号.jar的绝地地址 test_2.java
执行 :java -cp jep-版本号.jar的绝地地址:. test_2
上述执行命令中,以我的jep.jar绝对地址为例,我的是在/usr/local/lib64/python3.6/site-packages/jep-4.1.1-py3.6-linux-x86_64.egg/jep/jep-4.1.1.jar
标签:jep,调用,java,exec,python,interp From: https://www.cnblogs.com/chentiao/p/17418959.html