对于一个数据分析方面的工做者来讲,最熟悉的语言无疑就是Python了。对于软件开发者而言,Java又是极其重要的工具。那么,一个很天然的问题就是,咱们可以在Java中调用Python代码吗?
想要在Java中调用Python代码,有如下两个办法:html
在Java中若是须要调用第三方程序,能够直接经过Runtime实现,这也是最直接最粗暴的作法,粒度更加粗糙,效率较高,须要安装Python软件。而Jython是Python语言在Java平台的实现,能够理解为一个由 Java 语言编写的 Python 解释器,所以,不须要安装Python软件。它不只提供了Python的库,同时也提供了全部的Java类,这就使得其有一个巨大的资源库。Jython能够直接调用Python程序中的指定函数或者对象方法,粒度更加精细。但遗憾的是,Jython运行速度并不理想。
接下来,咱们将分别介绍以上两种调用方法。
首先是直接经过Runtime调用Python代码。先写个Python代码文件test_argv.py,它位于D盘中,其完整代码以下:java
import sys a = sys.argv[1] b = sys.argv[2] print("%s * %s = %s"%(a,b,int(a)*int(b)))
该Python代码接受两个命令行参数,而后输出一个乘法算式。调用的Java代码以下:python
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在处理计算结果。其输出以下图所示:shell
而后咱们将演示如何使用Jython来实现相似上述程序的功能。
Jython的MVN仓库地址为http://mvnrepository.com/arti..., API官方网址为: http://www.jython.org/javadoc/, jar的下载地址为: http://www.jython.org/downloa... . 下载jython-standalone-2.7.0.jar包,并将其加入到Eclipse的Java Build Path中,以下图:数组
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代码。
本次分享到此结束,欢迎你们交流~~ui