java 如何调用python
调用Python的几种方法
在Java中调用Python脚本或代码可以通过多种方式实现,以下是几种常见的方法:
使用ProcessBuilder或Runtime.exec
通过Java的ProcessBuilder或Runtime.exec启动Python进程,直接运行Python脚本:
ProcessBuilder pb = new ProcessBuilder("python", "script.py", "arg1", "arg2");
Process process = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitCode = process.waitFor();
使用Jython
Jython是一个将Python代码运行在JVM上的实现,可以直接在Java中调用Python代码:
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("print('Hello from Python')");
使用JPype
JPype允许Java代码调用Python库,需要先安装JPype库:
import org.jpype.*;
JPype.startJVM(JPype.getDefaultJVMPath());
JPype.exec("print('Hello from Python')");
JPype.shutdownJVM();
使用REST API
将Python代码封装为REST服务,Java通过HTTP调用:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://localhost:5000/api"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
使用Py4J
Py4J允许Java和Python互相调用,需要在Python端启动网关:
GatewayServer gatewayServer = new GatewayServer(new PythonEntryPoint());
gatewayServer.start();
PythonEntryPoint entryPoint = (PythonEntryPoint) gatewayServer.getPythonServerEntryPoint();
String result = entryPoint.callPythonMethod("arg1", "arg2");
gatewayServer.shutdown();
注意事项
- 确保系统中已安装Python并配置好环境变量。
- 使用Jython或JPype时需添加对应的依赖库。
- 跨语言调用时注意数据类型转换问题。
- 性能敏感场景需评估进程启动或网络调用的开销。







