SpringBoot调用Python
时间: 2025-04-20 09:30:55 浏览: 61
### 在 Spring Boot 中集成和调用 Python 脚本或服务
#### 使用 `ProcessBuilder` 方式
为了在 Spring Boot 应用程序中执行位于特定路径下的 Python 文件,可以采用 Java 的 `ProcessBuilder` 类来启动外部进程并传递参数给该 Python 程序。下面是一个简单的例子:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class PythonScriptExecutor {
public void executePythonScript() throws Exception {
ProcessBuilder pb = new ProcessBuilder("python", "D:\\python\\hello.py");
Process p = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
String s;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
}
}
```
此代码片段展示了如何通过指定完整的命令行指令(即 `"python"` 和脚本位置)创建一个新的 `ProcessBuilder` 实例,并启动它以运行 Python 脚本[^1]。
#### 利用 `Runtime.exec()` 方法
另一种方式是利用 `Runtime.getRuntime().exec()` 来实现相同的功能。这种方式更为简洁,但灵活性稍差一些。以下是具体的实现方法:
```java
String command = "python D:\\demo1.py";
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitCode = process.waitFor();
System.out.println("\nExited with error code : " + exitCode);
```
这段代码同样实现了读取 Python 脚本的标准输出流并将结果显示出来[^2]。
#### 借助 Apache Commons Exec 工具库
对于更复杂的场景或者需要更好的错误处理机制的情况,则推荐使用第三方工具包如 Apache Commons Exec 。这可以通过 Maven POM 文件引入相应的依赖项完成配置:
```xml
<dependencies>
<!-- Other dependencies -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-exec</artifactId>
<version>1.3</version>
</dependency>
</dependencies>
```
之后就可以编写如下所示的服务类来进行 Python 脚本的调用了:
```java
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.PumpStreamHandler;
// ...
CommandLine cmdLine = CommandLine.parse("python D:/path/to/your_script.py arg1 arg2...");
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(0); // 设置期望退出状态码为 0 表示成功
PumpStreamHandler streamHandler = new PumpStreamHandler(System.out, System.err);
executor.setStreamHandler(streamHandler );
try {
int exitValue = executor.execute(cmdLine );
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
```
这种方法提供了更加丰富的 API 支持以及良好的异常捕获能力,适用于生产环境中的应用开发[^3].
#### 远程调用 Python 脚本
如果目标 Python 脚本部署于不同的机器上,那么就需要考虑 SSH 或者其他网络协议来进行远程过程调用(RPC)[^4]. 不过这种情况下通常会涉及到额外的安全性和性能优化方面的工作,在实际项目里应谨慎评估其必要性.
阅读全文
相关推荐

















