详解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 Trie树实现字典排序
Mar 28 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
Jan 20 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
python中文编码与json中文输出问题详解
Aug 24 Python
python反编译学习之字节码详解
May 19 Python
python滑块验证码的破解实现
Nov 10 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
python实现随机加减法生成器
Feb 24 Python
如何用Python绘制3D柱形图
Sep 16 Python
Python偏函数实现原理及应用
Nov 20 Python
关于Python错误重试方法总结
Jan 03 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通过API获取手机号码归属地
2015/05/28 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
js获取url传值的方法
2015/12/18 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
python显示天气预报
2014/03/02 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
理解Python垃圾回收机制
2016/02/12 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Numpy之reshape()使用详解
2019/12/26 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
简约控的天堂:The Undone
2016/12/21 全球购物
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
中小企业员工手册范本
2015/05/14 职场文书
项目验收申请报告
2015/05/15 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL