详解java调用python的几种用法(看这篇就够了)


Posted in Python onDecember 10, 2020

java调用python的几种用法如下:

  • 在java类中直接执行python语句
  • 在java类中直接调用本地python脚本
  • 使用Runtime.getRuntime()执行python脚本文件(推荐)
  • 调用python脚本中的函数

准备工作:

创建maven工程,结构如下:

详解java调用python的几种用法(看这篇就够了)

到官网https://www.jython.org/download.html下载Jython的jar包或者在maven的pom.xml文件中加入如下代码:

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

1.在java类中直接执行python语句

创建JavaRunPython.java类:

package com.test;

import org.python.util.PythonInterpreter;

public class JavaRunPython {
  
  public static void main(String[] args) {
    PythonInterpreter interpreter = new PythonInterpreter();
    interpreter.exec("a='hello world'; ");
    interpreter.exec("print a;");
  }

}

输出结果如下:

详解java调用python的几种用法(看这篇就够了)

出现的console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0.并不是错误,而是兼容所导致,解决方法如下:

详解java调用python的几种用法(看这篇就够了)

详解java调用python的几种用法(看这篇就够了)

详解java调用python的几种用法(看这篇就够了)

2.在java中直接调用python脚本

在本地的D盘创建一个python脚本,文件名字为javaPythonFile.py,文件内容如下:

a = 1
b = 2
print (a + b)

创建JavaPythonFile.java类,内容如下:

package com.test;

import org.python.util.PythonInterpreter;

public class JavaPythonFile {

  public static void main(String[] args) {
    PythonInterpreter interpreter = new PythonInterpreter();
    interpreter.execfile("D:\\javaPythonFile.py");
  }
}

输出结果如下:

详解java调用python的几种用法(看这篇就够了)

3.使用Runtime.getRuntime()执行python脚本文件,推荐使用

在本地的D盘创建一个python脚本,文件名字为Runtime.py,文件内容如下:

print('RuntimeDemo')

创建RuntimeFunction.java类,内容如下:

package com.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class RuntimeFunction {
  public static void main(String[] args) {
    Process proc;
    try {
      proc = Runtime.getRuntime().exec("python D:\\Runtime.py");
      BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
      String line = null;
      while ((line = in.readLine()) != null) {
        System.out.println(line);
      }
      in.close();
      proc.waitFor();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    } 
  }
}

运行结果如下:

详解java调用python的几种用法(看这篇就够了)

4.调用python脚本中的函数

在本地的D盘创建一个python脚本,文件名字为add.py,文件内容如下:

def add(a,b):
  return a + b

创建Function.java类,内容如下:

package com.test;

import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;

public class Function {
  
  public static void main(String[] args) {
    PythonInterpreter interpreter = new PythonInterpreter();
    interpreter.execfile("D:\\add.py");
        
    // 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型
    PyFunction pyFunction = interpreter.get("add", PyFunction.class);
    int a = 5, b = 10;
    //调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”
    PyObject pyobj = pyFunction.__call__(new PyInteger(a), new PyInteger(b)); 
    System.out.println("the anwser is: " + pyobj);
  }

}

运行结果如下:

详解java调用python的几种用法(看这篇就够了)

到此这篇关于详解java调用python的几种用法(看这篇就够了)的文章就介绍到这了,更多相关java调用python内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python版的文曲星猜数字游戏代码
Sep 02 Python
Python Grid使用和布局详解
Jun 30 Python
Python根据成绩分析系统浅析
Feb 11 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
python搜索包的路径的实现方法
Jul 19 Python
python3安装crypto出错及解决方法
Jul 30 Python
Python Web框架之Django框架Form组件用法详解
Aug 16 Python
在Django中实现添加user到group并查看
Nov 18 Python
Python sep参数使用方法详解
Feb 12 Python
python实现猜单词游戏
May 22 Python
在pycharm中无法import所安装的库解决方案
May 31 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 #Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 #Python
python 实现ping测试延迟的两种方法
Dec 10 #Python
弄清Pytorch显存的分配机制
Dec 10 #Python
python实现经纬度采样的示例代码
Dec 10 #Python
Python urlopen()参数代码示例解析
Dec 10 #Python
Python urllib request模块发送请求实现过程解析
Dec 10 #Python
You might like
第四节--构造函数和析构函数
2006/11/16 PHP
PHP 数组教程 定义数组
2009/10/23 PHP
PHP开发负载均衡指南
2010/07/17 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
HTML5 与 XHTML2
2008/10/17 HTML / CSS
实习教师自我鉴定
2013/12/09 职场文书
学期研究性学习个人的自我评价
2014/01/09 职场文书
学生评语集锦
2015/01/04 职场文书
新教师个人总结
2015/02/06 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
redis缓存存储Session原理机制
2021/11/20 Redis