Groovy有一個很好的進程執行引擎,我想使用它。
有一種方法consumeProcessOutput
可以完成所有必要的工作。但我要的是每次都注入我的附加功能時,consumeProcessOutput
通話append
或東西就out
實例。Groovy/Java進程管理攔截/監聽輸出
public class ProcessExecutor {
static public void execute(IOutput output, String processName) {
def process = processName.execute()
def out = new StringBuffer()
process.consumeProcessOutput(out, out)
process.waitFor()
}
}
我知道
use (MyStringBufferIntercept) {
process.consumeProcessOutput(out, out)
}
但他們似乎只對當前線程工作,consumeProcessOutput
創建額外的線程。
那麼有什麼解決方案聽線添加並呼籲output.addLine(line)
和output.addErrorLine(line)
?
到目前爲止,我只有一個解決方案時,錯誤輸出與正常輸出一起去相當快不工作好:訂單的變化。
def process = processName.execute()
def inThread = Thread.start {
process.in.eachLine{ line -> output.addLine(line)}
}
def errThread = Thread.start {
process.err.eachLine{ line -> output.addErrorLine(line)}
}
inThread.join()
errThread.join()
process.waitFor()
我會同意Java解決方案。但我傾向於認爲groovy的人必須更優雅。
問題在於此解決方案行不會按照正確的順序進行。如果執行一些腳本過程,其中錯誤行在像斑馬線一樣的正常行之後,自定義解決方案將打印與consumeProcessOutput不同的結果。 – 2009-08-17 20:35:31