java 调用 python 方法

news2024/10/6 6:45:11

目录

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.coloradmin.cn/o/528790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个简单的基于QT的图像浏览器

以前学习前端的时候&#xff0c;对于多张图片的布局一般使用瀑布流布局&#xff08;CSS总结——瀑布流布局_css 瀑布流_黑白程序员的博客-CSDN博客&#xff09;&#xff0c;然后再通过懒加载&#xff08;如何实现图片懒加载&#xff0c;预加载&#xff01;&#xff01; - 简书&…

AutoDL使用百度网盘来进行数据的交互

文章目录 1. 简介 2. 操作2.1. 设置密码2.1.1. 登录网盘 2.2. 访问网盘中的数据2.3. 将数据放入到网盘中 1. 简介 AutoDL上面其实是可以直接使用百度网盘、阿里云盘等公共网盘的&#xff0c;这样传资料的时候就不用通过Xshell慢悠悠的传输了&#xff0c;如果有百度网盘会员的话…

[MTK7621] dhcp.script 脚本分析

该脚本只要完成IP地址、DNS和路由设置。由udhcpc程序调用。调用的函数在下面两个文件中定义&#xff1a; . /lib/functions.sh&#xff1a;定义了一些基础操作&#xff0c;例如配置文件获取等 . /lib/netifd/netifd-proto.sh&#xff1a;定义了IP、DNS和路由的处理函数 在dhcp.…

关于Photoshop中的【Stable-Diffusion WEBUI】插件:Auto.Photoshop.SD.plugin

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;PS的插件&#xff08;1.1&#xff09;安装&#xff08;1.2&#xff09;简评 &#xff08;零&#xff09;前言 本篇主要提到Photoshop中的Stable-Diffusion WEBUI插件&#xff0c;相对WEBUI并不算好用&#x…

MySQL 数据库面试题

TOC 1. MySQL 的内连接、左连接、右连接有有什么区别&#xff1f; inner join 内连接&#xff0c;在两张表进行连接查询时&#xff0c;只保留两张表中完全匹配的结果集。 left join 在两张表进行连接查询时&#xff0c;会返回左表所有的行&#xff0c;即使在右表中没有匹配的记…

STM32F401RET6 LQFP64 (Nucleo-F401RE) uart 打印输出

STM32F401RET6 LQFP64 (Nucleo-F401RE) uart 打印输出 1.STM32F401RET6 芯片情况 2.板子硬件 电源部分&#xff0c;开发板可利用JP5跳帽座子来选择使用USB供电或者使用管脚座子的外部Vin进行供电&#xff0c;无论是哪种供电&#xff0c;都需要经过U4的5V转成3.3V的LDO的再给S…

Simulink中如何获取所需变量对应的时间,并实时传输给其他模块

假设需要将时间信息传输给一个显示器模块,可以按照以下步骤进行操作: 在模型中添加“Clock”模块,将其输出与MATLAB函数“simulinktime”模块进行连接。 在模型中添加一个Scope模块,将其输入与Clock模块的输出进行连接。 运行模型,Scope模块将显示当前的仿真时间。 将Scop…

2023自动化测试选择什么工具或者框架好呢?

自动化测试的工具或者框架在市场上种类是比较繁多的。那么作为软件测试开发者应该怎么去选择呢&#xff1f;笔者觉得可以从测试需求、测试用例复杂度、技能水平和预算等方面去考虑。 Selenium 这是最常用的自动化测试工具之一&#xff0c;它可以模拟用户在不同的浏览器中进行操…

工厂人员定位系统源码,支持智能考勤、工时统计、行为检测、历史轨迹回放、人员管理、电子围栏功能

系统概述&#xff1a; 工厂人员定位系统&#xff0c;采用UWB定位技术&#xff0c;通过在厂区内部署一定数量的定位基站&#xff0c;以及为人员、车辆、物资佩戴标签卡的形式&#xff0c;实时获取人员精确位置&#xff0c;精度高达10cm。 工厂人员定位系统可实现物资/车辆实时定…

【Linux】】Linux权限的理解

一.Linux中的用户 Linux中分为两种用户&#xff0c;分别为&#xff1a; 1.root 用户&#xff0c;也叫超级用户&#xff0c;它的权限非常高&#xff0c;不受其他权限的约束&#xff0c;也就是可以为所欲为&#xff1b; 2.普通用户&#xff1a;除了root用户外&#xff0c;都是普通…

【2023春招】4399 web后台-Java后端开发

目录 一、JVM1.类加载过程2.static和final变量的初始化时机 二、依赖1.Spring Boot 自动装配2.使用依赖过程中遇到问题如何排查3.引入的某个依赖不符合预期&#xff0c;如何处理 三、数据库&#xff1a;1.InnoDB 和 MyISAM 索引的区别2.字符串类型字段&#xff0c;WHERE 数字&a…

枚举【Java】

文章目录 枚举的使用switch语句Enum类的常用方法枚举的构造方法 反射与枚举 在之前的学习中&#xff0c;如果我们需要组织一组枚举类型的数据&#xff0c;我们通常会使用常量来进行定义。但这种定义方式存在一个问题就是&#xff1a;如果在一个程序中&#xff0c;普通常量和使用…

1053 Path of Equal Weight(超级无敌详细注释+45行代码)

分数 30 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 Given a non-empty tree with root R, and with weight Wi​ assigned to each tree node Ti​. The weight of a path from R to L is defined to be the sum of the weights of all the nodes along the pa…

UE5.1.1C++从0开始(6.两个额外的魔法弹:瞬移魔法弹和黑洞魔法弹)

做完这两个功能总共花费了一个下午加一个晚上的时间&#xff0c;瞬移魔法弹难度较低&#xff0c;黑洞魔法可能我的理解有误导致消耗时间较长&#xff0c;我会在下面把踩的坑写出来。 加上这个作业&#xff0c;我们一共做了三个魔法子弹了。同时那个老师也说我们可以写一个父类…

js中各种运算符

文章目录 扩展运算符&#xff1a;...逻辑运算符&#xff08;&& 或 || &#xff09;第一、&& (逻辑与)运算&#xff0c;看一个简单的例子&#xff1a;第二、|| (逻辑或)运算&#xff0c;看一个简单的例子&#xff1a;三、&& (逻辑与) 和||&#xff08;逻…

JMX vs JFR:谁才是最强大的JVM监控利器?

大家好&#xff0c;我是小米&#xff01;今天我们来聊一聊JVM监控系统&#xff0c;特别是关于JMX和JFR的使用。你是否有过在线上应用出现性能问题时&#xff0c;无法准确获取关键指标的困扰呢&#xff1f;那么&#xff0c;不妨听听我给大家带来的解决方案。 什么是JMX 首先&a…

什么是CTF?打CTF的意义是什么?(附网络安全入门教程)

什么是CTF? CTF在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。它起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今&#xff0c;已经成为全球范围网络安全圈流行的竞赛形式&#xff0…

使用mkdocs快速部署上线静态站点到Github

背景 mkdocs是一种方便地生成站点的工具&#xff0c;相比hugo、hexo等个人博客而言&#xff0c;mkdocs更加简便、轻量级&#xff0c;可以快速帮助部署上线类似个人技术本&#xff08;notebook&#xff0c;wiki&#xff09;之类的站点。并且支持默认支持站点内搜索&#xff0c;…

网络安全自学路线

很多人上来就说想学习黑客&#xff0c;但是连方向都没搞清楚就开始学习&#xff0c;最终也只是会无疾而终&#xff01;黑客是一个大的概念&#xff0c;里面包含了许多方向&#xff0c;不同的方向需要学习的内容也不一样。 算上从学校开始学习&#xff0c;已经在网安这条路上走…

基于ensp的mpls vpn跨域optionA方案(分公司之间不能互访但是能访问总部场景)

目录 一 实验拓扑 二 实验要求 三 实验分析 四 实验配置说明 4.1完成正常ip地址配置&#xff0c;ISP内部使用ospf协议和mpls ldp协议 4.2 PE和CE之间起ebgp邻居 4.3 PE和PE之间起mpbgp邻居 4.4 PE和CE、ASBR之间设置VRF来进行RT值的过滤&#xff0c;选择合适的RT值来完…