详解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实现的本地文件搜索功能示例【测试可用】
May 30 Python
Python基于多线程实现ping扫描功能示例
Jul 23 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
Python数据分析模块pandas用法详解
Sep 04 Python
python的等深分箱实例
Nov 22 Python
Python读取csv文件实例解析
Dec 30 Python
最新2019Pycharm安装教程 亲测
Feb 28 Python
详解Python中pyautogui库的最全使用方法
Apr 01 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
Python实现中英文全文搜索的示例
Dec 04 Python
python中yield的用法详解
Jan 13 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
如何使用PHP中的字符串函数
2006/10/09 PHP
php你的验证码安全码?
2007/01/02 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
php简单获取复选框值的方法
2016/05/11 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
js实现筛选功能
2020/11/24 Javascript
python检测服务器是否正常
2014/02/16 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
Python实现代码统计工具
2019/09/19 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
vue+django实现下载文件的示例
2021/03/24 Vue.js
管道维修工岗位职责
2013/12/27 职场文书
志愿者活动总结范文
2014/04/26 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
报名委托书
2015/01/29 职场文书
初中运动会前导词
2015/07/20 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
oracle重置序列从0开始递增1
2022/02/28 Oracle