详解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实现配置文件备份的方法
Jul 30 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python如何读取MySQL数据库表数据
Mar 11 Python
python中logging库的使用总结
Oct 18 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 Python
Python通用函数实现数组计算的方法
Jun 13 Python
Python3直接爬取图片URL并保存示例
Dec 18 Python
Python 音频生成器的实现示例
Dec 24 Python
Django 路由层URLconf的实现
Dec 30 Python
python安装第三方库如xlrd的方法
Oct 31 Python
Python echarts实现数据可视化实例详解
Mar 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 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
JObj预览一个JS的框架
2008/03/13 Javascript
JavaScript 事件对象的实现
2009/07/13 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
完善的jquery处理机制
2016/02/21 Javascript
javascript如何创建对象
2016/08/29 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
three.js 入门案例详解
2018/01/23 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
分享Python文本生成二维码实例
2016/01/06 Python
python开发之str.format()用法实例分析
2016/02/22 Python
python简单实例训练(21~30)
2017/11/15 Python
Python解决八皇后问题示例
2018/04/22 Python
django中静态文件配置static的方法
2018/05/20 Python
对python 调用类属性的方法详解
2019/07/02 Python
python实现小世界网络生成
2019/11/21 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
python如何删除列为空的行
2020/07/17 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
法雷奥SQA(electric)面试问题
2016/01/23 面试题
AJax面试题
2014/11/25 面试题
小学学习雷锋活动总结
2014/07/03 职场文书
2015暑假假期总结
2015/07/13 职场文书