Java之调用Python代码
??对于一个数据分析方面的工作者来说,最熟悉的语言无疑就是Python了。对于软件开发者而言,Java又是极其重要的工具。那么,一个很自然的问题就是,我们能够在Java中调用Python代码吗?
??想要在Java中调用Python代码,有以下两个办法:
- 直接通过Runtime进行调用
- 调用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);
}
}
【Java之调用Python代码】从以上代码中,可以发现,我们往Python代码中传入了两个命令行参数(两个整数),通过Java提供的Runtime环境让Python执行程序,最后用Java得到在CMD或shell中的输出流并在Java程序输出,本质上还是Python在处理计算结果。其输出如下图所示:
文章图片
程序输出结果 ??然后我们将演示如何使用Jython来实现类似上述程序的功能。
??Jython的MVN仓库地址为http://mvnrepository.com/artifact/org.python/jython/2.7.1b3, API官方网址为: http://www.jython.org/javadoc/, jar的下载地址为: http://www.jython.org/downloads.html . 下载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代码。
??本次分享到此结束,欢迎大家交流~~
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天