用于调用外部程序的Java库

用于调用外部程序的Java库,java,workflow,external-process,Java,Workflow,External Process,我正在寻找一个有助于运行外部程序的JAVA库。现在,我在单独的线程中“手动”运行它们并捕获I/O 我有几个不同的外部工具要运行,我需要的是一个统一的方法。我必须处理的任务包括: -根据预定义模板准备输入文件 -运行命令 -等待结果并解析输出文件 -维护管道 整个管道可视为一个图形,外部工具为节点,数据流为边。如果数据流允许,软件可以在并行线程中运行一些命令,那就太好了 有没有解决这些问题的办法 根据我得到的答案,我觉得我必须澄清:我不需要管道。数据流可以用文件来解决,我无论如何都需要这些文件。此

我正在寻找一个有助于运行外部程序的JAVA库。现在,我在单独的线程中“手动”运行它们并捕获I/O

我有几个不同的外部工具要运行,我需要的是一个统一的方法。我必须处理的任务包括: -根据预定义模板准备输入文件 -运行命令 -等待结果并解析输出文件 -维护管道

整个管道可视为一个图形,外部工具为节点,数据流为边。如果数据流允许,软件可以在并行线程中运行一些命令,那就太好了

有没有解决这些问题的办法

根据我得到的答案,我觉得我必须澄清:我不需要管道。数据流可以用文件来解决,我无论如何都需要这些文件。此外,管道必须是线性的(1个输出->1个输入),但我需要一个图表

我已经有了一个python原型——一堆脚本。这是好的,但对我来说——不可扩展。此外,我调用的一些程序是用java编写的,所以用java编写整个程序会很方便。 最好的,
Tim

如果您在Unix上,您是否考虑过动态地构建一个Unix shell命令行(使用管道、重定向、
tee
等),然后使用
ProcessBuilder
或类似工具生成这一命令,以及(比如)
/bin/sh-c


这意味着您正在使用一个现有的工作基础结构,该基础结构处理管道、缓冲、错误收集和管理资源。

我认为这应该是完美的。它还有相当好的java库来进行文件处理。从那到也许,我认为你应该能做你想做的事

是否要将标准输出从一个程序传输到另一个程序的标准输入?我怀疑这在Java中是否可行。至于并发性:这很简单,每个外部进程创建一个线程,只需对新线程所依赖的所有程序执行Process.waitFor。或者更好,让线程等待它启动的进程,并检查哪些进程符合条件。您可以使用ProcessBuilder运行外部程序。要将数据从一个程序传输到另一个程序,请在两个prorgam之间使用shell和
|
。是的,ant是最好的选择,我已经考虑过了。但是它有几个严重的问题:(1)我可以声明变量和数组吗?通常情况下,一个程序的结果是由其他可执行程序使用的字符串数组(例如,其他命令)。我认为ant contrib支持变量。