开发环境及工具:

java 环境 :JDK 1.8

Python环境:Python 3.7 (安装anaconda自带的python版本)

Anaconda环境: conda 4.5.11

Maven环境: Maven 3.6.3

开发工具:

IDEA 2020.3.2

Pycharm 2019.2

Postman

本文是以Spring Boot项目来完成Java与Python的数据操作的。

方法一  执行简单的Python代码

第一步  添加依赖

在pom.xml文件中加入以下内容,并联网下载。

<!--Jython-->
<dependency><groupId>org.python</groupId><artifactId>jython-standalone</artifactId><version>2.7.2</version>
</dependency>

第二步  编写Controller

TestController.java

@RestController
@RequestMapping("test")
public class TestController {@RequestMapping("hello")public void printHello(){PythonInterpreter interpreter = new PythonInterpreter();interpreter.exec("list = [5,2,3,9,4,6]");interpreter.exec("print(sorted(list))");}}

第三步  启动程序,发起请求

通过Postman发起请求,将下面请求路径相应的位置做下修改即可。

http://localhost:8899/test/test

输出结果:

方法二  Jython执行Python文件

第一步 编写Python文件

用记事本或者Pycharm等编写代码

add.py

def add(a,b):return (a+b)

第二步  编写Controller

 @RequestMapping("showMsg")public void showMsg() {PythonInterpreter interpreter = new PythonInterpreter();interpreter.execfile("D:\\pythonPro\\add.py");// 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型PyFunction pyFunction = interpreter.get("add", PyFunction.class);int a = 15, b = 20;/***    调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的"Python的类型"*    Python 是一个弱类型语言,对数据类型会进行隐式转换,在Java中定义好类型再传入*/PyObject pyObject = pyFunction.__call__(new PyInteger(a), new PyInteger(b)); //多个参数逗号拼接System.out.println("the answer is : " + pyObject);}

第三步  启动程序并访问

访问:

http://localhost:8899/test/showMsg

运行结果:

方法三  通过Runtime调用python脚本

第一步  编写test.py文件

import numpy as np
list2 = [[1,2,3],['a','b','c']]
print(np.array(list2))

查看当前python 安装的库:

pip list

这里用到了 numpy库,如果没有这个库可以手动安装:

pip3 install -i https://mirrors.aliyun.com/pypi/simple numpy

第二步  编写Controller

  @RequestMapping("testpy")public void testpy() {Process process;        //package java.lang; 这个包 不要导入错了try {// 模仿控制台运行py文件  python + 文件名process = Runtime.getRuntime().exec("python D:\\pythonPro\\test.py");// 用输入输出流来显示结果BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line = null; // 按行读取while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}// 记得关闭流bufferedReader.close();process.waitFor();} catch (IOException | InterruptedException e) {e.printStackTrace();}}

注:

process = Runtime.getRuntime().exec("python D:\\pythonPro\\test.py");

这里 python 不要漏掉了,是一条执行命令

漏掉会出现错误:

第三步  启动程序并访问

Postman访问

http://localhost:8899/test/testpy

输入结果:

四  参数传递

在实际的应用场景中,我们可能会在Python程序中传递参数。

第一步  修改一下 add.py文件

import sysdef add(num1,num2):return (num1+num2)if __name__ == '__main__':mylist = []for i in range(1, len(sys.argv)):mylist.append((int(sys.argv[i])))print(add(mylist[0],mylist[1]))

第二步  编写Controller

@RequestMapping("testArgs")public void testArgs(){int num1 = 15;int num2 = 52;try {/*** 其中args是String[] { “python”,path,url1,url2 };* path是python程序所在的路径,url1是参数1,url2是参数2,以此类推。*/String[] args = new String[] { "python", "D:\\pythonPro\\add.py", String.valueOf(num1), String.valueOf(num2) };Process proc = Runtime.getRuntime().exec(args);// 执行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();}}

注意:后续我在Linux使用过程中,会出现目录找不到的错误信息。解决办法: 将 String[] { “python”,path,url1,url2 }; 中 python的路径改为绝对路径即可。

第三步  启动程序并访问

Postman访问

http://localhost:8899/test/testArgs

运行结果:

以上就是常用的java 与Python数据交互方式。

Java 与 Python 数据交互相关推荐

  1. JAVA与SAP数据交互的方式总结

    JAVA与SAP数据交互的方式总结 RFC方式:Java程序直接通过RFC访问SAP的对象(或称函数,可能叫法不对)     SAP提供了BAPI(Business Application Progr ...

  2. Thrift的java和php数据交互

    为什么80%的码农都做不了架构师?>>>    Thrift是一个软件框架(远程过程调用框架),用来进行可扩展且跨语言的服务的开发,封装了数据传输格式(二进制.json)和网络通信的 ...

  3. python 数据交互_Python用户交互以及数据类型

    一.用户交互与格式化输出 1.用户交互 1.1什么是用户交互 程序等待用户输入的数据,程序执行完毕后为用户反馈信息. 1.2为何程序要与用户交互 为了让计算机像人类一样与用户交互 1.3使用方式 在p ...

  4. 微信小程序之前端与java后台进行数据交互

    后台是用SpringBoot+SSM来写的,整体上来说,和普通的Web没什么区别 要注意的是,对于小程序访问的控制层方法,需要返回一个Map类型 @RequestMapping(value = &qu ...

  5. java前后端数据交互_前后端数据交互(示例代码)

    function ajax(option) { function objtostring(obj){ if(typeof obj==='object' && !Array.isArra ...

  6. 微信小程序和python数据交互_记录 python flask 与微信小程序交互

    一.小程序向flask传递参数 1.小程序将请求数据转换为JSON格式 wx.request({ url: 'http://127.0.0.1:8080/query_user', data: { go ...

  7. java跟jsp数据交互的坑

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_25343557/article/ ...

  8. python 数据交互_Python 进程间数据交互

    Quartz -- 从 HelloWorld 开始 1.Quartz 是用来完成任务调度的. 2.Quartz 的三个核心概念:调度器.任务.触发器. (1)Job:通过实现该接口来定义需要执行的任务 ...

  9. java与c/c++之间的数据交互-----jni点滴

    2019独角兽企业重金招聘Python工程师标准>>> 淡泊明志.宁静致远 A Diamond is just a piece of Coal that did well under ...

最新文章

  1. Github上最受关注的前端大牛,快来膜拜吧!
  2. ie禁止html复制元素,JavaScript_禁止选中文字兼容IE、Chrome、FF等,复制代码 代码如下: $(el).attr('u - phpStudy...
  3. c++ 类 A类调用B类
  4. SAP CRM WebClient UI recent object的后台存储实现
  5. Mac端解决(含修改8.0.13版的密码):Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)...
  6. python战斗2:看到一个页面编码
  7. apache在线升级yum_基于Redis实现在线游戏积分排行榜 - phyger
  8. xp计算机重启记录,XP电脑关机后自动重启的解决方法
  9. FireFox 在新建标签页插入“片段”广告引社区争议
  10. Spring.NET学习笔记16——事务管理(应用篇) Level 200
  11. Hadoop中的一些基本操作
  12. 基于python的图书管理系统设计与实现论文_基于JAVA的图书馆管理系统设计[毕业论文_].doc...
  13. 银河麒麟服务器无raid驱动安装处理
  14. 图解 Python 编程(6) | 条件控制与if语句(附要点速查表·完结)
  15. C2000浮点运算注意事项——CPU和CLA的差异及误差处理技巧
  16. [rock]Life ’s A Struggle -宋岳庭(转)
  17. 面试官:什么是责任链模式?
  18. Ubuntu安装多用户免密登录Jupyterhub
  19. 2021第三届长安杯
  20. 基于平台的软件开发(一)

热门文章

  1. vue路由传参那些事
  2. 化工原理 --- 热量传递(补充)
  3. Springboot 整合 Redisson
  4. RQN 273 马棚问题 dp
  5. Mac 升级Python 2.7 到 Python 3.8
  6. 软件设计的七大设计原则
  7. 2循环赛日程表(分治)
  8. linux6.5能安装的firefox,CentOS 6.5 更新到最新firefox的方法
  9. mysql-表分区-list分区
  10. 5分钟看懂怎么买车险最适合自己、最划算