详解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三元运算符实现方法
Dec 17 Python
Python实现的二维码生成小软件
Jul 11 Python
python中的装饰器详解
Apr 13 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
python利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
在pycharm中设置显示行数的方法
Jan 16 Python
Python之——生成动态路由轨迹图的实例
Nov 22 Python
打包PyQt5应用时的注意事项
Feb 14 Python
Python中with上下文管理协议的作用及用法
Mar 18 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
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
php调用c接口无错版介绍
2014/03/11 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
python中使用mysql数据库详细介绍
2015/03/27 Python
Python单元测试框架unittest简明使用实例
2015/04/13 Python
在python win系统下 打开TXT文件的实例
2018/04/29 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
python 实现倒排索引的方法
2018/12/25 Python
pandas数据集的端到端处理
2019/02/18 Python
Python自定义一个异常类的方法
2019/06/27 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
Python 硬币兑换问题
2019/07/29 Python
python 字符串常用函数详解
2019/09/11 Python
用python解压分析jar包实例
2020/01/16 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
员工培训心得体会
2013/12/30 职场文书
四个太阳教学反思
2014/02/01 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
国培远程培训感言
2014/03/08 职场文书
竞争上岗实施方案
2014/03/21 职场文书
空气环保标语
2014/06/12 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript