java 调用 python 方法

简介: java 调用 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文件中添加一个两个数相加的函数,代码如下

1. def add(a,b):
2. 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();
        }
    }
}
目录
打赏
0
0
0
0
9
分享
相关文章
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
289 71
|
30天前
|
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
571 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
16天前
|
Java 中的 toString() 方法详解:为什么它如此重要?
在Java开发中,`toString()`方法至关重要,用于返回对象的字符串表示。默认实现仅输出类名和哈希码,信息有限且不直观。通过重写`toString()`,可展示对象字段值,提升调试效率与代码可读性。借助Lombok的`@Data`注解,能自动生成标准化的`toString()`方法,简化开发流程,尤其适合字段较多的场景。合理运用`toString()`,可显著提高开发效率与代码质量。
48 0
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
随着数据采集需求的增加,传统爬虫工具如Selenium、Jsoup等因语言割裂、JS渲染困难及代理兼容性差等问题,难以满足现代网站抓取需求。微软推出的Playwright框架,凭借多语言支持(Python/Java/.NET/Node.js)、统一API接口和优异的JS兼容性,解决了跨语言协作、动态页面解析和身份伪装等痛点。其性能优于Selenium与Puppeteer,在学术数据库(如Scopus)抓取中表现出色。行业应用广泛,涵盖高校科研、大型数据公司及AI初创团队,助力构建高效稳定的爬虫系统。
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
|
9天前
|
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
51 15
|
16天前
|
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
53 17
uv安装python及其依赖的加速方法
国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用`UV_PYTHON_INSTALL_MIRROR`这个环境变量。除此以外,对于多人协作场景,`UV_CACHE_DIR`也是一个有用的环境变量。本文会介绍这两个变量。
295 10
Java 中的 equals 方法:看似简单,实则深藏玄机
本文深入探讨了Java中`equals`方法的设计与实现。默认情况下,`equals`仅比较对象引用是否相同。以`String`类为例,其重写了`equals`方法,通过引用判断、类型检查、长度对比及字符逐一比对,确保内容相等的逻辑。文章还强调了`equals`方法需遵循的五大原则(自反性、对称性等),以及与`hashCode`的关系,避免集合操作中的潜在问题。最后,对比了`instanceof`和`getClass()`在类型判断中的优劣,并总结了正确重写`equals`方法的重要性,帮助开发者提升代码质量。
50 1
从命名约定到特殊方法,Python下划线符号的妙用!
下划线(`_`)是Python开发者日常接触的重要符号,其含义和应用场景多样。本文全面解析了Python中下划线的不同用法,包括单下划线作为临时变量、国际化翻译函数、交互式解释器特殊变量;单下划线前缀表示保护成员;单下划线后缀避免关键字冲突;双下划线前缀触发名称改写;双下划线前后缀定义特殊方法等。此外,还介绍了数字分隔符、模式匹配通配符等新特性,并总结了下划线使用的最佳实践与常见问题解答。通过本文,读者可深入了解下划线在Python中的多重角色及其设计哲学。
58 2
Python数值方法在工程和科学问题解决中的应用
本文探讨了Python数值方法在工程和科学领域的广泛应用。首先介绍了数值计算的基本概念及Python的优势,如易学易用、丰富的库支持和跨平台性。接着分析了Python在有限元分析、信号处理、优化问题求解和控制系统设计等工程问题中的应用,以及在数据分析、机器学习、模拟建模和深度学习等科学问题中的实践。通过具体案例,展示了Python解决实际问题的能力,最后总结展望了Python在未来工程和科学研究中的发展潜力。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等