让我举一个简单的例子:
在Linux环境中,我有一个Grails脚本,我想使用 ls 命令获取所有目录:
def ls = "ls".execute()
println ls
// result is java.lang.UNIXProcess@f16b42
我想获得与终端相同的输出
,而不是获取进程IDPs。:这只是一个例子,我真的不需要列出目录。
答案 0 :(得分:2)
快速的方法是:
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
当然,您可能需要检查proc.waitFor()
返回的exitCode,并使用错误流做更好的事情,然后将其发送到System.err
,但您明白了这一点; - )
答案 1 :(得分:1)
您也可以这样做。
File directory = new File(args[0])
Process p = "ls".execute([], directory)
p.waitForProcessOutput(System.out, System.err)
如果这是一个名为listFiles.groovy的脚本,则可以运行
groovy listFiles ~/blah
并查看blah目录中的所有内容。在进入任何其他命令之前,这将等待该过程完成。
查看Process的常规文档。那里有很多有趣的东西。