Java代码中调用shell脚本和python脚本并获得输出结果(分为小数据量和大数据量)

时间:2022-05-20 04:36:15 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系

Java 代码中调用 shell 脚本和 python 脚本并获得输出结果(分为小数

据量和大数据量)

2015/12/23 3161 Java 代码中调用 shell python 脚本有多种实现方式,通用方 式是使用 java.lang 中的 Runtime 类新开进程,调用 python 脚本的一个例子如下 shell 同理):

public String python(String pythonPath, String[] params) { File file = new File(pythonPath); if (!file.exists()){ return “python 脚本不存在!”; String[] command = Arrays.copyOf(new

String[]{“python”,

pythonPath},

params.length

+

2);

System.arraycopy(params, 0, command, 2, params.length); List res = new ArrayList (); try

{ Process process = Runtime.getRuntime().exec(command, null, null); process.waitFor(); Scanner scanner = new Scanner(process.getInputStream()); while (scanner.hasNextLine())

{ String line = scanner.nextLine(); res.add(line); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); return “success”; }

例子中,参数 pythonPath 就是 python 脚本的绝对路径,参数 params

是脚本的参数数组,command 就是执行 python 命令字符串数组,格式就是 python + 脚本 + 参数,构造好 command 后传入 exec()中执行新进程,然后调用 waitFor() 数等待进程结束,结束后从进程的输入流中获得脚本的输出结果存储到字符串数组 中。

乍一看,上面的代码并没有问题,对于少量的输出结果执行后相当完美,但是

当脚本的输出结果大小大于 inputStream 缓冲区大小时,程序会阻塞在 waitFor()函数 这里,问题就在于脚本的输出结果是在进程执行完之后才读取,一个好的解决办法 就是新开一个清理线程来不断清空缓冲区,也就是输出和读取同时进行,代码如 下:


本文来源:https://www.wddqw.com/doc/01770185e3bd960590c69ec3d5bbfd0a7856d512.html