目录
1.JPython
1.1 JPython介绍
1.2 JPython实践
2.使用Runtime.getRuntime()执行python脚本文件,推荐使用
一个项目可能需要用到人工智能算法,在java后端中需要调用python算法,这篇文章就简单介绍一下其中的两种java调用python方法。
1.JPython
1.1 JPython介绍
JPython 是一种运行在 Java 平台上的 Python 解释器。它可以让你使用 Python 编写 Java 程序,并且能够使用 Java 类库和工具。
JPython 的主要优点在于,它可以让你在 Java 平台上使用 Python 语言开发程序,这对于那些熟悉 Python 语言但又希望使用 Java 开发程序的人来说,是一个非常方便的工具。
此外,JPython 还具有良好的互操作性,可以轻松地与 Java 程序交互。这意味着,你可以使用 Python 编写的程序来调用 Java 程序中的方法,或者使用 Java 程序中的方法来调用 Python 程序中的代码。
总的来说,JPython 是一种非常实用的工具,可以让你在 Java 平台上使用 Python 语言开发程序,并能够方便地与 Java 程序交互。
1.2 JPython实践
maven中导入依赖
<dependency><groupId>org.python</groupId><artifactId>jython-standalone</artifactId><version>2.7.2</version></dependency>
在.py文件中添加一个两个数相加的函数,代码如下:
def add(a,b):return a+b
java调用python进行实现1+2的结果运算,代码如下:
@GetMapping("/test")public String test(){PythonInterpreter pythonInterpreter=new PythonInterpreter();pythonInterpreter.execfile("C:\\Users\\Administrator\\PycharmProjects\\pythonProject\\go.py");PyFunction pyFunction=pythonInterpreter.get("add",PyFunction.class);PyObject pyObject = pyFunction.__call__(new PyInteger(1), new PyInteger(2));return pyObject.toString();}
运行执行结果如下图:
2.使用Runtime.getRuntime()执行python脚本文件,推荐使用
String数组里的那一行很重要,首先一定要设置好你所使用的python的位置,切记不要直接使用python,因为系统会默认使用自带的python,所以一定要设置好你所使用的python的位置,否则可能会出现意想不到的问题(比如说我使用的是anaconda中的python,而ubuntu系统会默认调用自带的python,而我自带的python中并没有numpy库,所以会造成相应的代码不会执行的问题,所以设置好python的位置是很重要的)。还有就是要设置好py文件的位置,使用绝对路径。在这里插入代码片。
还有就是可以看出,此方法可以满足我们python代码中调用第三方库的情况,简单实用。
public class Test {public static void main(String[] args) {try {// 第一个参数为本地python路径, 第二个参数为脚本路径String[] args1 = new String[]{"C:\\Users\\Administrator\\PycharmProjects\\pythonProject\\venv\\Scripts\\python", "C:\\Users\\Administrator\\PycharmProjects\\pythonProject\\go.py"};Process proc = Runtime.getRuntime().exec(args1); // 执行py文件BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));String line = null;int index =0;while ((line = in.readLine()) != null) {System.out.println(line);}in.close();proc.waitFor();}catch (Exception e) {e.printStackTrace();}}}