详解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 从远程服务器下载东西的代码
Feb 10 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
用Python PIL实现几个简单的图片特效
Jan 18 Python
python实现年会抽奖程序
Jan 22 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
TensorFlow固化模型的实现操作
May 26 Python
python跨文件使用全局变量的实现
Nov 17 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
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
javascript使用activex控件的代码
2011/01/27 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
浅谈Python的异常处理
2016/06/19 Python
python获取list下标及其值的简单方法
2016/09/12 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
python+opencv实现动态物体追踪
2018/01/09 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
Python实现序列化及csv文件读取
2020/01/19 Python
输入N,打印N*N矩阵
2012/02/20 面试题
文秘专业自荐信
2013/10/14 职场文书
商务英语应届生自我鉴定
2013/12/08 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
股东授权委托书
2014/10/15 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
户外亲子活动总结
2015/05/08 职场文书
高三教师工作总结2015
2015/07/21 职场文书
安全生产培训心得体会
2016/01/18 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
Python中json.dumps()函数的使用解析
2021/05/17 Python