java后端如何调python接口-Python教程

资源魔 29 0
比来正在做名目的时分,需求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,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接口的具体内容,更多请存眷资源魔其它相干文章!

标签: Python python教程 python编程 python使用问题

抱歉,评论功能暂时关闭!