python+java混合编程

汪胤
2023-12-01

       python通常在编程中难以单独的完成一个系统,因此在开发中常常需要借助其他语言开发主要程序,使用python对数据进行处理。

      在通过java向python传递数据的时候通常是一些小的数据,例如:字符串、数组、数字等,如果想向python传递图片、视频、音频时通常传递的时其路径。

     java调用python通常有三种方式:直接写在Java程序中,不常用;通过java调用;通过Runtime.getRuntime()调用。

方法一代码如下:

import org.python.util.PythonInterpreter;

public class content {
      public static void main(String[] args) {
      
          PythonInterpreter interpreter = new PythonInterpreter();
          interpreter.exec("a=[5,2,3,9,4,0]; ");
          interpreter.exec("b=[5,2,3,9,4,0]; ");
          interpreter.exec("c=a+b; ");
          interpreter.exec("print(sorted(c));");  //此处python语句是3.x版本的语法
      }

}
方法二:此方法不适用于python中调用第三方库,更改代码中的python脚本路径即可

import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;

public class diaoyong {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.execfile("C:\\Users\\Administrator.ZJZL-20180706GA\\PycharmProjects\\untitled\\test.py");

        // 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型
        PyFunction pyFunction = interpreter.get("add", PyFunction.class);
        int a = 5, b = 10;
        //调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”
        PyObject pyobj = pyFunction.__call__(new PyInteger(a), new PyInteger(b)); 
        System.out.println("the anwser is: " + pyobj);

    }

}

test,python代码:

def add(a,b):
    return a + b

方法三:

package com.test.python;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class disanfang {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub


        Process proc;
        try {

         //2,3分别为两个参数
            proc = Runtime.getRuntime().exec("python C:\\Users\\Administrator.ZJZL-20180706GA\\PycharmProjects\\untitled\\detect\\dlib人脸检测.py",2,3);

            // 执行py文件
            //用输入输出流来截取结果
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String line = null;
            //获取返回值
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
            in.close();
            proc.waitFor();
            System.out.println("代码执行完成1");

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } 
    }

}

改代码相当于将python代码放在控制台执行改代码,在传递参数时也应在python端编写相应的参数节后语句,在传递文件时只可以传递文件的路径即可

import  sys

def a(c,d):

       return c+d

a(sys.argv[1],sys.argv[2])

 类似资料: