详解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 12 Python
python爬取51job中hr的邮箱
May 14 Python
Python自定义线程类简单示例
Mar 23 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
Python实现京东秒杀功能代码
May 16 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
Aug 18 Python
python实现最大优先队列
Aug 29 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
python实现excel公式格式化的示例代码
Dec 23 Python
Python如何配置环境变量详解
May 18 Python
Python if else条件语句形式详解
Mar 24 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获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
深入理解vuex2.0 之 modules
2017/11/20 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
JS实现滑动插件
2020/01/15 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
一百多行python代码实现抢票助手
2018/09/25 Python
简单了解python关系(比较)运算符
2019/07/08 Python
python超时重新请求解决方案
2019/10/21 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
给男朋友的道歉短信
2015/05/12 职场文书
追悼词范文大全
2015/06/23 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
一条慢SQL语句引发的改造之路
2022/03/16 MySQL