最近在做项目的时候,需要java 调用 python 接口,在网上找了一些方法,但是总碰到一些问题,索性将网上的方法和自己的理解总结一下,希望对各位有所帮助,也请各位大神不吝赐教。
此方法需要引用 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> 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(); } }</string></string></string>
更多Python相关技术文章,请访问Python教程栏目进行学习!
위 내용은 Java 백엔드에서 Python 인터페이스를 조정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구
