python+java混合编程

本文详细介绍了在Java中调用Python的三种常见方法,包括直接在Java中使用Python代码,通过PythonInterpreter调用Python脚本,以及利用Runtime.getRuntime()执行Python程序。每种方法都有详细的代码示例,帮助开发者理解如何在Java环境中运行Python代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       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])

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值