簡単な例を挙げましょう。Linux環境ではGrailsスクリプトがあり、 lsコマンド
を使用してすべてのディレクトリを取得したいと思います。
def ls = "ls".execute()
println ls
// result is java.lang.UNIXProcess@f16b42
プロセスIDを取得する代わりに、端末に入力するのと同じ出力を取得したい
追伸:これは単なる例であり、ディレクトリをリストする必要はありません。
手っ取り早い方法は次のとおりです。
String output = 'ls'.execute().text
println output
でも!大量の出力を書き込むと、リーダーがいっぱいになり、すべてブロックされます。したがって、次のようなことを行う必要があります。
String output = new StringWriter().with { out ->
Process proc = 'ls'.execute()
proc.consumeProcessOutput( out, System.err )
proc.waitFor()
out.toString()
}
println output
もちろん、返されるexitCodeを確認proc.waitFor()
し、エラーストリームをより適切に処理してからSystem.err
、に送信することもできますが、アイデアは得られます;-)
このようなこともできます。
File directory = new File(args[0])
Process p = "ls".execute([], directory)
p.waitForProcessOutput(System.out, System.err)
これがlistFiles.groovyというスクリプトの場合、次のコマンドを実行できます。
groovy listFiles ~/blah
何とかディレクトリ内のすべてを参照してください。これは、プロセスが終了するのを待ってから、他のコマンドに移動します。
ProcessのGroovyドキュメントを確認してください。そこには楽しいものがたくさんあります。