博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java之调用Python代码
阅读量:6367 次
发布时间:2019-06-23

本文共 2688 字,大约阅读时间需要 8 分钟。

  对于一个数据分析方面的工作者来说,最熟悉的语言无疑就是Python了。对于软件开发者而言,Java又是极其重要的工具。那么,一个很自然的问题就是,我们能够在Java中调用Python代码吗?

  想要在Java中调用Python代码,有以下两个办法:

  • 直接通过Runtime进行调用
  • 调用Jython

在Java中如果需要调用第三方程序,可以直接通过Runtime实现,这也是最直接最粗暴的做法,粒度更加粗糙,效率较高,需要安装Python软件。而Jython是Python语言在Java平台的实现,可以理解为一个由 Java 语言编写的 Python 解释器,因此,不需要安装Python软件。它不仅提供了Python的库,同时也提供了所有的Java类,这就使得其有一个巨大的资源库。Jython可以直接调用Python程序中的指定函数或者对象方法,粒度更加精细。但遗憾的是,Jython运行速度并不理想。

  接下来,我们将分别介绍以上两种调用方法。
  首先是直接通过Runtime调用Python代码。先写个Python代码文件test_argv.py,它位于D盘中,其完整代码如下:

import sysa = sys.argv[1]b = sys.argv[2]print("%s * %s = %s"%(a,b,int(a)*int(b)))

该Python代码接受两个命令行参数,然后输出一个乘法算式。调用的Java代码如下:

package javaCode;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner;public class TestPython {    public static void main(String[] args) throws Exception {            Scanner input = new Scanner(System.in);                // 在同一行输入两个数字,用空格分开,作为传入Python代码的命令行参数        System.out.println("Enter two integers(e.g. 12 34): ");        String integers = input.nextLine();        String[] numbers = integers.split(" ");                // 定义传入Python脚本的命令行参数,将参数放入字符串数组里        String cmds = String.format("python D://test_argv.py %s %s",                                     numbers[0], numbers[1]);        // 执行CMD命令        System.out.println("\nExecuting python script file now.");        Process pcs = Runtime.getRuntime().exec(cmds);        pcs.waitFor();        // 定义Python脚本的返回值        String result = null;        // 获取CMD的返回流        BufferedInputStream in = new BufferedInputStream(pcs.getInputStream());        // 字符流转换字节流        BufferedReader br = new BufferedReader(new InputStreamReader(in));        // 这里也可以输出文本日志        String lineStr = null;        while ((lineStr = br.readLine()) != null) {            result = lineStr;        }        // 关闭输入流        br.close();        in.close();        System.out.println(result);    }}

从以上代码中,可以发现,我们往Python代码中传入了两个命令行参数(两个整数),通过Java提供的Runtime环境让Python执行程序,最后用Java得到在CMD或shell中的输出流并在Java程序输出,本质上还是Python在处理计算结果。其输出如下图所示:

程序输出结果

  然后我们将演示如何使用Jython来实现类似上述程序的功能。

  Jython的MVN仓库地址为, API官方网址为: , jar的下载地址为: . 下载jython-standalone-2.7.0.jar包,并将其加入到Eclipse的Java Build Path中,如下图:

Java Build Path中加入jython-standalone-2.7.0.jar

Java代码如下:

package javaCode;import org.python.util.PythonInterpreter;public class TestPython {    public static void main(String args[]) {        PythonInterpreter interpreter = new PythonInterpreter();        interpreter.exec("import sys ");        interpreter.exec("a = input('Enter a:')");        interpreter.exec("b = input('Enter b:')");        interpreter.exec("print('%s * %s = %s' %(a, b, a*b))");    }}

运行以上程序,结果如下图:

运行结果

  至此,我们成功地用以上两种方法在Java中调用了Python代码。

  本次分享到此结束,欢迎大家交流~~

转载地址:http://isrma.baihongyu.com/

你可能感兴趣的文章
Angular开发实践(八): 使用ng-content进行组件内容投射
查看>>
canvas+websocket+vue做一个完整的你画我猜小游戏
查看>>
android复习清单
查看>>
工作代码备用
查看>>
spring cloud互联网分布式微服务云平台规划分析--spring cloud定时调度平台
查看>>
说说如何配置 Webpack
查看>>
小程序中使用箭头函数的问题
查看>>
走进 JDK 之 Long
查看>>
Android打地鼠游戏的修改和优化
查看>>
Java异常
查看>>
map、reduce、filter、for...of、for...in等总结
查看>>
html2canvas-实现页面截图
查看>>
入门 | 从文本处理到自动驾驶:机器学习最常用的50大免费数据集
查看>>
笔记-从源码角度分析alloc与init的底层
查看>>
消除GitHub上的历史记录
查看>>
自学 JAVA 的几点建议
查看>>
第十三天-企业应用架构模式-对象-关系元数据映射模式
查看>>
k8s与HPA--通过 Prometheus adaptor 来自定义监控指标
查看>>
Python 比特币教程之二: 机器人收发比特币
查看>>
虎牙直播在微服务改造方面的实践和总结
查看>>