详解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深入学习之上下文管理器
Aug 31 Python
python开发之文件操作用法实例
Nov 13 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
学习python分支结构
May 17 Python
python地震数据可视化详解
Jun 18 Python
python实现自动化上线脚本的示例
Jul 01 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
Python 静态方法和类方法实例分析
Nov 21 Python
python 线程的五个状态
Sep 22 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 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/04/05 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
JS之小练习代码
2008/10/12 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
Python读取Excel的方法实例分析
2015/07/11 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
求职者应聘的自我评价
2013/10/16 职场文书
新闻编辑求职信
2014/04/09 职场文书
企业金融服务方案
2014/06/03 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
博士导师推荐信
2015/03/25 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
Golang: 内建容器的用法
2021/05/05 Golang