Java执行Python脚本
  TEZNKK3IfmPf 2023年11月12日 35 0

术业有专攻,Java适合做企业级平台应用,或者云计算,大数据相关平台等。Python则擅长于小工具应用。

两种方式

Runtime

根据有无入参

无入参

public static void testPythonWithRuntime() {
Process proc;
try {
proc = Runtime.getRuntime().exec("python D:\\demo1.py");
// 用输入输出流来截取结果
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
proc.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}

有入参

public static void testPythonWithRuntime1() {
int a = 18;
int b = 23;
try {
String[] args = new String[]{"python", "D:\\demo.py", String.valueOf(a), String.valueOf(b)};
Process proc = Runtime.getRuntime().exec(args);
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
proc.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}

优缺点

无需额外引入依赖

Jython

Jpython简介:一种完整的语言,而不仅仅是一个Java翻译器或Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。

引入依赖:

<dependency>
<groupId>org.python</groupId>
<artifactId>jython-standalone</artifactId>
<version>2.7.2</version>
</dependency>
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("a=[5,2,3,9,4,0]; ");
interpreter.exec("print(sorted(a));");// python 3.x 语法
interpreter.exec("print sorted(a);");// python 2.x 语法

执行脚本示例代码:

public static void testPythonWithJython() {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("E:\\saveAsPic.py");
// 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型
PyFunction pyFunction = interpreter.get("add", PyFunction.class);
// 调用有参函数,必须先将参数转化为对应的Python类型
PyObject pyobj = pyFunction.__call__();
System.out.println("the anwser is: " + pyobj);
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   12天前   28   0   0 java
TEZNKK3IfmPf