详解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的ORM框架SQLAlchemy入门教程
Apr 28 Python
python PIL模块与随机生成中文验证码
Feb 27 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
python生成excel的实例代码
Nov 08 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
Django ImageFiled上传照片并显示的方法
Jul 28 Python
Django实现网页分页功能
Oct 31 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
Python3-异步进程回调函数(callback())介绍
May 02 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
python非标准时间的转换
Jul 25 Python
python代码实现备忘录案例讲解
Jul 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 表单提交给自己
2008/07/24 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
php目录拷贝实现方法
2015/07/10 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
2017/06/06 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
提升Python程序运行效率的6个方法
2015/03/31 Python
selenium+python环境配置教程详解
2019/05/28 Python
详解python播放音频的三种方法
2019/09/23 Python
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
经销商订货会主持词
2014/03/27 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
社区健康教育工作方案
2014/06/03 职场文书
体育比赛口号
2014/06/09 职场文书
班组长安全工作职责
2014/07/15 职场文书
大学生安全责任书
2014/07/25 职场文书
博物馆观后感
2015/06/05 职场文书
感恩教育观后感
2015/06/17 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis