java怎么调用python_java调用python程序

丰富的第三方库使得python非常适合用于进行数据分析,最近在项目中就涉及到java调用python实现的算法。目前,java调用python主要包括三种方法:1、利用runtime在本地运行python脚本;2、通过jython调用;3、java通过rpc(远程过程调用)调用python。其中,runtime调用python实际上是通过cmd命令本地运行python脚本,对传递参数的长度有限制;而通过jython调用的方式无法导入numpy等第三方库。通过rpc远程调用的方式则不存在上述限制,是比较理想的方式。

1、通过runtime调用python

代码如下:

package pythonTest;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class pythonTest {

public static void main(String[] args) {

String filePath = ".\\src\\AverageEcho6211701.txt";

String coePath = ".\\src\\OVlidar20190116.txt";

String[] data = TxtUtil.getContentByLine(filePath,3000);

String[] coeData = TxtUtil.getContentByLine(coePath, 500);

System.out.println(data[0]);

int bearing = 90;

double decCoe = 0.25;

try {

String[] pythonArgs = new String[] { "python", ".\\src\\11.py", String.valueOf(bearing), String.valueOf(decCoe),

String.join(",", data)};

String[] appendPythonArgs = new String[pythonArgs.length + coeData.length];

System.arraycopy(pythonArgs, 0, appendPythonArgs, 0, pythonArgs.length);

System.arraycopy(coeData, 0, appendPythonArgs, pythonArgs.length, coeData.length);

Process proc = Runtime.getRuntime().exec(pythonArgs);// 执行py文件

// 定义Python脚本的返回值

String result = null;

BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));

String line = null;

while ((line = in.readLine()) != null) {

result = line;

}

in.close();

proc.waitFor();

System.out.println(result);

} catch (IOException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

通过runtime调用实际上是通过cmd命令在本地运行python脚本,参数以字符串形式进行传递,当字符串超出一定长度时程序会报错。

java.io.IOException: Cannot run program "python

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Java调用 Python 程序,你可以使用 Java 的 `ProcessBuilder` 类,该类提供了启动进程并与其进行交互的功能。下面是一个简单的例子: ```java import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.BufferedReader; public class PythonCaller { public static void main(String[] args) { try { ProcessBuilder pb = new ProcessBuilder("python", "path/to/your/python/script.py"); Process process = pb.start(); // 获取 Python 程序的输出 InputStream inputStream = process.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } // 等待 Python 程序执行完毕 int exitCode = process.waitFor(); System.out.println("Python script exited with code " + exitCode); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 在上面的例子中,我们启动了一个名为 `script.py` 的 Python 程序,并在 Java 中获取了其输出。如果需要向 Python 程序传递参数,可以在 `ProcessBuilder` 的构造函数中传递参数列表。例如,如果需要向 Python 程序传递一个字符串参数,可以这样写: ```java ProcessBuilder pb = new ProcessBuilder("python", "path/to/your/python/script.py", "arg1"); ``` 其中,`arg1` 就是要传递的参数。在 Python 程序中,可以通过 `sys.argv` 获取传递的参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值