2011-01-22 47 views
2

我正在尋找一個便於運行外部程序的JAVA庫。現在我在一個單獨的線程中「手動」運行它們並捕獲I/O。用於調用外部程序的Java庫

我有幾個不同的外部工具可以運行,我需要的是一個統一的方法來做到這一點。我要處理的任務包括: - 根據預定義模板 準備輸入文件 - 運行命令 - 等待結果和解析輸出文件 - 保持管道

整個管道可以被看作是一個曲線圖外部工具作爲節點和數據流作爲邊緣。如果數據流允許,如果軟件可以在並行線程中運行一些命令,那將是非常好的。

是否存在此類問題的現有解決方案?

基於我得到的答案我覺得我必須澄清:我不需要管道。數據流可以用文件來解決,反正我需要這些文件。此外,管道必須是線性的(1輸出 - > 1輸入),但我需要一個圖表

我已經有了一種Python中的原型 - 一堆腳本。這很好,但對我來說 - 不可擴展。此外,我調用的一些程序是用java編寫的,所以用java編寫整個程序會很方便。 最佳, 添

+0

你想從一個程序管道stdout到另一個程序的stdin嗎?我懷疑Java是否可行。至於併發性:這很簡單,爲每個外部進程創建一個線程,併爲所有依賴新程序的程序執行Process.waitFor。或者,讓Thread等待它啓動的進程並檢查哪些進程符合條件。 – maaartinus 2011-01-22 11:51:16

+1

您可以使用ProcessBuilder運行外部程序。要將數據從一個程序傳輸到另一個程序,請在兩個prorgams之間用`|`使用你的shell。 – 2011-01-22 12:07:48

回答

1

如果你在Unix上,你有沒有想過動態構建一個Unix shell命令行(使用管道,重定向,tee等),然後產卵這個命令關閉使用ProcessBuilder或相似, (說)/bin/sh -c

這意味着您正在使用處理管道,緩衝,錯誤收集和管理資源的現有工作基礎架構。

1

我認爲ant應該是完美的。它也有相當不錯的Java庫來做文件處理。在那之間,也許velocity templates,我會認爲你應該能夠做你想做的。