Java调用Python程序方法、Jpython使用过程

 更新时间:2026年07月08日 08:53:42   作者:brilliantZC  
想在Java中无缝调用Python代码?本文手把手教你使用Jython实现Java和Python混合编程,无需额外安装Python环境,学会如何直接执行Python语句、调用函数,以及传递参数,轻松打通两大语言,立即掌握Java调用Python的实用技巧,提升开发效率

由于最近需要在Java中跑Python代码,需要将Java和Python两种语言结合使用。学习了一下Jpython。

一、简介

Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。

Jython也有很多从CPython中继承的模块库。

Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。

这使其有一个巨大的资源库。

二、Jpython使用

首先需要添加maven依赖

<dependency>
	<groupId>org.python</groupId>
	<artifactId>jython-standalone</artifactId>
	<version>2.7.0</version>
</dependency>

1、在Java中执行python语句

public class JpythonTest {
    public static void main(String[] args) {
        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.exec("a=[10,8,3,1,7,0]; ");
        interpreter.exec("print(sorted(a));"); //此处python语句是3.x版本的语法
        interpreter.exec("print sorted(a);"); //此处是python语句是2.x版本的语法
    }
}

输出结果为:

2、在Java中执行Python脚本中的函数

首先在本地建立一个python脚本,命名为fun.py,做两个数的平方和。

def fun(a,b):
	return a*a + b*b

Java测试代码

public class JpythonTest {
    public static void main(String[] args) {

        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.execfile("D:\\fun.py"); //fun 脚本位置

        // 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型
        PyFunction pyFunction = interpreter.get("fun", PyFunction.class);
        int a = 5, b = 10;

        //调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”
        PyObject pyobj = pyFunction.__call__(new PyInteger(a), new PyInteger(b));
        System.out.println("平方和为: " + pyobj);
    }
}

结果:

3、使用Java执行python脚本,并传递参数

建立python脚本np.py,含有python第三方库的程序

import numpy as np
import sys

if __name__ == '__main__':
	a = [1,5,9,7,8,3]
	b = int(sys.argv[1])
	a.append(b)
	print("a: ",a)
	sum = np.sum(a)
	print("sum: ",sum)

Java测试代码

public class JpythonTest {
    public static void main(String[] args) {
        try {
            // 第一个参数为本地python路径, 第二个参数为脚本路径
            String[] args1 = new String[]{"D:\\software\\python3.8\\python", "D:\\np.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();
        }
    }
}

结果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot基于Redis实现token的在线续期的实践

    SpringBoot基于Redis实现token的在线续期的实践

    本文主要介绍了使用Redis实现JWT令牌在线续期的方案,通过在线续期token,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • 排序算法图解之Java归并排序的实现

    排序算法图解之Java归并排序的实现

    归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。本文主要介绍了归并排序的实现,需要的可以参考一下
    2022-11-11
  • 如何基于ThreadPoolExecutor创建线程池并操作

    如何基于ThreadPoolExecutor创建线程池并操作

    这篇文章主要介绍了如何基于ThreadPoolExecutor创建线程池并操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • java中反射(Reflection)机制举例详解

    java中反射(Reflection)机制举例详解

    Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,这篇文章主要介绍了java中反射(Reflection)机制的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • Java并发 线程间的等待与通知

    Java并发 线程间的等待与通知

    这篇文章主要介绍了Java并发 线程间的等待与通知,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java 数据结构进阶二叉树题集上

    Java 数据结构进阶二叉树题集上

    二叉树可以简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。本文将带你通过实际题目来熟练掌握
    2022-04-04
  • Sharding-JDBC自动实现MySQL读写分离的示例代码

    Sharding-JDBC自动实现MySQL读写分离的示例代码

    本文主要介绍了Sharding-JDBC自动实现MySQL读写分离,优点在于数据源完全有Sharding-JDBC托管,写操作自动执行master库,读操作自动执行slave库,感兴趣的可以了解一下
    2021-11-11
  • Java中判断对象是否相等的equals()方法使用教程

    Java中判断对象是否相等的equals()方法使用教程

    与==运算符响应,equals()方法也是Java中对对象进行比较的一大方式,要特别注意二者的不同点,这个我们在下文中即将讲到,接下来我们就来看一下Java中判断对象是否相等的equals()方法使用教程
    2016-05-05
  • 利用SpringBoot实现一个基于本地代理模式的RPC调用框架

    利用SpringBoot实现一个基于本地代理模式的RPC调用框架

    虽然Dubbo、gRPC等成熟框架已经为我们提供了完整的RPC解决方案,但理解其底层原理并动手实现一个简化版本,对提升我们的技术理解深度很有帮助,下面我们就来看看如何使用SpringBoot实现一个基于本地代理模式的RPC调用框架吧
    2025-07-07
  • 在本地用idea连接虚拟机上的hbase集群的实现代码

    在本地用idea连接虚拟机上的hbase集群的实现代码

    这篇文章主要介绍了在本地用idea连接虚拟机上的hbase集群的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论