java调用Python函数

您所在的位置:网站首页 Java调用Python java调用Python函数

java调用Python函数

2024-07-03 03:58| 来源: 网络整理| 查看: 265

前提

公司渔船轨迹混乱,需要算法修正,算法用Python开发,java代码需要调用Python函数,于是我就研究了一下如何通过java使用Python,以下就是一些调用Python的步骤。

本文以springboot项目为案例简述调用Python的方式 1、引入依赖 org.python jython-standalone 2.7.0 2、编写Python

将Python代码放入static下面 在这里插入图片描述

3、简单调用Python中的add方法

java的类型必须转成Python类型,否则会报错 PyObject 的返回结果可以通过toString获取

@GetMapping("/add") public String add() { //获取Python文件 String path = this.getClass().getClassLoader().getResource("").getPath() + "static/python/lineAdress.py"; PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile(path); // 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型 PyFunction pyFunction = interpreter.get("add", PyFunction.class); //调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型” PyObject pyobj = pyFunction.__call__(new PyInteger(1),new PyInteger(2)); //PyObject 的返回结果可以通过toString获取 return pyobj.toString(); }

请求结果: 在这里插入图片描述

3、将对象传递给Python的函数,并转成字典类型

这是RequestBean 的json字符串 {"data":[{"mchNo":"123"}]} java代码: 将RequestBean 的对象先转成json字符串,然后在封装成Python类型 Py.java2py(jsonRequest)

@GetMapping("/test") public String test() { String path = this.getClass().getClassLoader().getResource("").getPath() + "static/python/lineAdress.py"; PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile(path); // 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型 PyFunction pyFunction = interpreter.get("getJson", PyFunction.class); //调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型” RequestBean requestBean = new RequestBean(); List dataList = new ArrayList(); requestBean.setData(dataList); LocationBean locationBean = new LocationBean(); locationBean.setMchNo("123"); dataList.add(locationBean); String jsonRequest = JSON.toJSONString(requestBean); //调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型” PyObject pyobj = pyFunction.__call__(Py.java2py(jsonRequest)); return pyobj.toString(); }

Python代码: 首先映入ast,用于将字符串转成字典类型 在这里插入图片描述 记住一定要将java传递的参数转成字典,否则取值会报错,因为java传递过来的是字符串。这里建议使用ast,当然使用json也可以转化,但是会有多余的字符出现 ast.literal_eval() 在这里插入图片描述 执行结果: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3