你狗哥 2020-07-01 16:02 采纳率: 0%
浏览 318

java调用python接口问题

现有一个python源码XXXX.py 存放在桌面上

现在有一个python代码片段

def detect(imgfile)

返回参数为:

 return sorted_label, origimg

其中需要往其中传递一个String类型的url
求大神给出java调用此接口的代码 谢谢大神们

  • 写回答

3条回答 默认 最新

  • 你是我一生的风景 2020-07-01 16:15
    关注
    /**
     * Jython环境,生存python解释器
     * @author webim
     *
     */
    public final class JythonEnvironment
    {
        private static JythonEnvironment INSTANCE = new JythonEnvironment();
    
        /**
         * 私有构造方法
         */
        private JythonEnvironment()
        {
        }
    
        /**
         * 获取单例
         * @return JythonEnvironment
         */
        public static JythonEnvironment getInstance()
        {
            return INSTANCE;
        }
    
        /**
         * 获取python系统状态,可根据需要指定classloader/sys.stdin/sys.stdout等
         * @return PySystemState
         */
        private PySystemState getPySystemState()
        {
            PySystemState.initialize();
            final PySystemState py = new PySystemState();
            py.setClassLoader(getClass().getClassLoader());
            return py;
        }
    
        /**
         * 获取python解释器
         * @return PythonInterpreter
         */
        public PythonInterpreter getPythonInterpreter(){
            PythonInterpreter inter = new PythonInterpreter(null, getPySystemState());
    //        PythonInterpreter inter = new PythonInterpreter();
            return inter;
        }
    }
    
    添加 JPython 依赖
    <dependency>
                <groupId>org.python</groupId>
                <artifactId>jython</artifactId>
                <version>2.7.0</version>
            </dependency>
    
    上面这个依赖有问题,可用下面依赖避免各种问题。
    
            <dependency>
                <groupId>org.python</groupId>
                <artifactId>jython-standalone</artifactId>
                <version>2.7.0</version>
            </dependency>
    /*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();
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题