java 调用 python 方法

news/2024/11/6 10:00:14/

目录

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


http://www.ppmy.cn/news/68099.html

相关文章

你真的理解分布式数据的分区吗?

分布式数据存储是指将数据分散存储在多个节点或服务器上的技术。而分区是将数据划分为逻辑上的片段或部分&#xff0c;每个分区可以在分布式系统中的不同节点上存储。分区主要是为了可扩展性。不同的分区可以放在不共享集群中的不同节点上&#xff0c;可以帮助实现负载均衡、高…

总结852

学习目标&#xff1a; 月目标&#xff1a;5月&#xff08;张宇强化前10讲&#xff0c;背诵15篇短文&#xff0c;熟词僻义300词基础词&#xff09; 周目标&#xff1a;张宇强化前5讲并完成相应的习题并记录&#xff0c;英语背3篇文章并回诵 每日必复习&#xff08;5分钟&#…

Python每日一练(20230515) 只出现一次的数字 I\II\III

目录 1. 只出现一次的数字 Single Number 2. 只出现一次的数字 II Single Number II 3. 只出现一次的数字 III Single Number III &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 leetcod…

c++速查备忘录Ctrl+f键关键字查

// c //<vector> 数组 vector<int> v{7,5,10,12}; v.push_back(26); //类似js的push &#xff0c; pop_back 删最后一个数 //循环打印 for(auto e:arr) cout<<e<<" "; // 日期 <ctime> time_t nowtime(0); tm *ltm localtime(&…

甘特图控件DHTMLX Gantt入门使用教程【引入】:dhtmlxGantt 与Node.js(上)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…

(动态规划,分治)leetcode53. 最大子数组和

文章目录 一、题目1、题目描述2、基础框架3、原题链接 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、本题小知识 一、题目 1、题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&…

android room数据库简单使用

Room来源 Android采用Sqlite作为数据库存储。由于Sqlite代码写起来繁琐且容易出错&#xff0c;因此&#xff0c;开源社区逐渐出现了各种ORM&#xff08;Object Relational Mapping&#xff09;库。常见的有ORMLite, GreenDAO等。Google也意识到推出自家ORM库的必要性&#xff0…

什么是VLAN?为什么要划分VLAN?

VLAN(Virtual Local Area Network)即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域&#xff0c;VLAN内的主机间可以直接通信&#xff0c;而VLAN间则不能直接互通。这样&#xff0c;广播报文就被限制在一个VLAN内。 一、为…