JAVA调用Python代码

工程中往往会涉及多种语言的混合使用,本文记载一种常用的JAVA调用python方法。网上流传JAVA调用Python的方法有Jython,Runtime等。


1. 通过Runtime调用python脚本

我们运行python脚本的时候,通常只需在命令行敲出“python  xxx.py”就可以了。这里使用JAVA调用python的原理就是通过使用JAVA完成命令行操作。

先看一个简单的python程序:

# coding=utf-8
a = 3
b = 4
res = a+b
print(res)

注意:这里的print(res)不可省略,需要输出才能被JAVA承接。 

import java.io.*;

public class JcallPy {

    public static void main(String[] args) throws IOException, InterruptedException {
        String executer = "python";
        String file_path = "E:\\intellij idea\\workspace\\src\\demo.py";// python绝对路径
        String[] command_line = new String[] {executer, file_path};
        Process process = Runtime.getRuntime().exec(command_line);
        BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
        in.close();
        process.waitFor();
    }

}

 上述程序实际上完成了一个“python xxx.py”的功能,然后把python的输出承接过来。结果如下:

上述操作无法向python程序传递参数,如果需要传递参数则需要用python中的argv模块去承接参数,修改Python代码为:

# coding=utf-8
from sys import argv

a = argv[1]
b = argv[2]
res = int(a) + int(b)
print(res)

这样就可以以“python xxx.py a b”这种形式来传递参数,修改JAVA代码如下: 

import java.io.*;

public class JcallPy {

    public static void main(String[] args) throws IOException, InterruptedException {
        String executer = "python";
        String file_path = "E:\\intellij idea\\workspace\\src\\demo.py"; // python绝对路径
        String num1 = "3";
        String num2 = "7";
        String[] command_line = new String[] {executer, file_path, num1, num2};
        Process process = Runtime.getRuntime().exec(command_line);
        BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
        in.close();
        process.waitFor();
    }

}

输出结果:

 


总结

JAVA调用Python可以通过runtime,可以完成参数的传递,运行结果的传递。传递的数据对JAVA来讲都是二进制流,需要整理成所需的数据格式;传递的数据对于Python来讲,都是字符串,也需要调整成所需的数据格式。当传输数据为图像或者矩阵等复杂数据格式时,要适当修改两种语言的传递接口。

展开阅读全文
©️2020 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值