SpringBoot(Java)调用Python脚本及传参

博客介绍了Java调用Python脚本的相关内容,包括Java如何调用并传递参数,Python脚本怎样接受参数并返回结果,最终输出计算结果,实现了Java与Python之间的数据交互。

概述

本文用一个简单的例子,描述如何在SpringBoot中调用Python脚本,并获取Python返回的参数

Java调用并传参

public void test() {
        System.out.println("Start");
        // python脚本的绝对路径,在windows中用"\\"分隔,在Linux中用"/"分隔
        String pyPath = "E:\\Code\\Java\\myproject\\src\\main\\resources\\demo2.py";

        // 传入python脚本的参数为”111“
        String[] args1 = new String[]{"python", pyPath, "111"};

        try {
            // 执行Python文件,并传入参数
            Process process = Runtime.getRuntime().exec(args1);
            // 获取Python输出字符串作为输入流被Java读取
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String actionStr = in.readLine();
            if (actionStr != null) {
                System.out.println(actionStr);
            }

            in.close();
            process.waitFor();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        System.out.println("End");
    }

Python脚本接受参数并返回结果

import sys

if __name__ == '__main__':
    stateStr = sys.argv[1];
    number = int(stateStr) + 5;

    print("Python return: " + str(number));

输出结果

Start
Python return: 116
End

参考文献

Java调用Python脚本传递数据并返回计算结果

### 调用Python脚本的方法 为了实现从Java程序中调用Python脚本并传递参数,可以采用Jython这一工具来完成此操作。然而需要注意的是,如果在Python代码里引入了第三方库(例如`sklearn`),可能会遇到兼容性问题[^1]。 对于简单的函数调用以及基本类型的参数传递,Jython能够很好地支持这些需求。但是由于Jython并不完全支持所有的C扩展模块,因此像`sklearn`这样的依赖于C语言编写的底层优化的库,在Jython环境下可能无法正常工作。 针对这种情况的一个解决方案是通过命令行执行标准CPython解释器运行Python脚本,并利用进程间通信机制(如输入输出流)来进行数据交换。另一种方法则是借助REST API或者gRPC等网络服务形式建立两者之间的桥梁。 另外值得注意的是,除了上述提到的技术栈之外,还有其他一些方式也可以满足跨语言编程的需求,比如使用JNI(Java Native Interface)直接加载动态链接库中的Python解析器实例;或者是基于文件系统的临时存储作为中介载体等等。 ```java // 使用ProcessBuilder启动外部Python进程的例子 import java.io.BufferedReader; import java.io.InputStreamReader; public class CallPythonFromJava { public static void main(String[] args) throws Exception { ProcessBuilder pb = new ProcessBuilder("python", "script.py", arg1, arg2); Process p = pb.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值