java后端如何调python接口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java后端如何调python接口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4131字,纯文字阅读大概需要6分钟。
内容图文
![java后端如何调python接口](/upload/InfoBanner/zyjiaocheng/425/76216289c81344b99a356fe4a8721ced.jpg)
此方法需要引用 org.python包,需要下载Jpython。在这里先介绍一下Jpython。下面引入百科的解释:(推荐学习:Python视频教程)
Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。
一:创建环境 Python 环境
import org.python.util.PythonInterpreter; import java.util.Properties; /** * Jython环境,获取Python的实例 * @author webim * */ public class JythonEnvironment { //定义一个静态变量 private static JythonEnvironment INSTANCE = new JythonEnvironment(); /** * 私有构造方法 */ private JythonEnvironment() { } /** * 获取单例 * @return JythonEnvironment */ public static JythonEnvironment getInstance() { return INSTANCE; } /** * 获取python解释器 * @return PythonInterpreter */ public PythonInterpreter getPythonInterpreter() { Properties props = new Properties(); props.put("python.home","path to the Lib folder"); props.put("python.console.encoding", "UTF-8"); // Used to prevent: console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0. props.put("python.security.respectJavaAccessibility", "false"); //don't respect java accessibility, so that we can access protected members on subclasses props.put("python.import.site","false"); Properties preprops = System.getProperties(); //对 python 进行初始化 PythonInterpreter.initialize(preprops, props, new String[0]); PythonInterpreter inter = new PythonInterpreter(); return inter; } }
二:调用 python 的接口
因为 python 和 java是两种不同的语言,因此在项目的 controller 、service 和 mapper 中直接出现 Python 的接口,因此自己封装ExecPython 类,
封装python的接口,目的让 python 接口和java程序分隔开。
import org.python.core.PyFunction; import org.python.core.PyObject; import org.python.util.PythonInterpreter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import java.util.Map; /*enum的这个用法,可以作为变种的安全单例,值得借鉴哦 ^_^ */ @Service @Component public class ExecPython { public static final Logger logger = LoggerFactory.getLogger(Exception.class); //定义 python 解释器 private static PythonInterpreter inter; public ExecPython() { this.inter = JythonEnvironment.getInstance().getPythonInterpreter(); this.inter.execfile("C:\\test.py"); } //设置 python 脚本的路径 public void setPythonPath (String pythonPath){ this.inter.execfile(pythonPath); } public void execute(String scriptFile, Map<String,String> properties) { logger.info("获取解释器"); try { PyFunction getNetInfo = (PyFunction) inter.get("getNetInfo", PyFunction.class); PyObject netInfo = getNetInfo.__call__(); System.out.println("anwser = " + netInfo.toString()); } catch (Exception e) { e.printStackTrace(); logger.info("Python 脚本文件执行失败"); } } //获取 Python 字符串 public String getString(){ //获取到python 脚本中的接口 PyFunction func = (PyFunction) inter.get("adder", PyFunction.class); PyObject pyobj = func.__call__(); System.out.println("anwser = " + pyobj.toString()); return pyobj.toString(); } // 获取当前数组 public String getArr() { PyFunction getArr = (PyFunction) inter.get("getArr", PyFunction.class); PyObject pyobjTwo = getArr.__call__(); pyobjTwo.__len__(); System.out.println("anwser = " + pyobjTwo.toString()+" len:"+pyobjTwo.__len__()); //将 PyObject 对象转换成 java 对象 //Object object = pyobjTwo.__tojava__(List.class); //List<String> list = (List<String>) object; //将查询到数据转换成一个 JSON 字符串 String result = pyobjTwo.toString(); String JsonStr = "{" + result + "}"; logger.info(JsonStr); logger.info("将查询的结果转换成 JSON 字符串:",JsonStr); return pyobjTwo.toString(); } }
更多Python相关技术文章,请访问Python教程栏目进行学习!
以上就是java后端如何调python接口的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的java后端如何调python接口全部内容,希望文章能够帮你解决java后端如何调python接口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。