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)
を追加してください。
これまでのところ、エラー出力が通常の出力と非常に高速になる場合にはうまくいかないソリューションが1つしかありません。
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ソリューションに同意します。しかし、私はグルーヴィーの方がよりエレガントでなければならないと考える傾向があります。
この解決策の問題は、正しい順序で行かないことです。シマウマのような通常の行の後にエラー行が来るスクリプトプロセスを実行すると、カスタムソリューションはconsumeProcessOutputと同じ結果を出力しません。 –