0

簡単な例を挙げましょう。Linux環境ではGrailsスクリプトがあり、 lsコマンド
を使用してすべてのディレクトリを取得したいと思います。

def ls = "ls".execute()
println ls
// result is java.lang.UNIXProcess@f16b42

プロセスIDを取得する代わりに、端末に入力するのと同じ出力を取得したい

追伸:これは単なる例であり、ディレクトリをリストする必要はありません。

4

2 に答える 2

4

手っ取り早い方法は次のとおりです。

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、に送信することもできますが、アイデアは得られます;-)

于 2012-11-28T15:14:29.987 に答える
1

このようなこともできます。

File directory = new File(args[0])
Process p = "ls".execute([], directory)            
p.waitForProcessOutput(System.out, System.err)         

これがlistFiles.groovyというスクリプトの場合、次のコマンドを実行できます。

groovy listFiles ~/blah

何とかディレクトリ内のすべてを参照してください。これは、プロセスが終了するのを待ってから、他のコマンドに移動します。

ProcessのGroovyドキュメントを確認してください。そこには楽しいものがたくさんあります。

于 2012-12-01T01:56:02.007 に答える