0

举个简单的例子:
在 Linux 环境中,我有一个 Grails 脚本,我想使用ls命令获取所有目录:

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

我不想获得进程 ID,而是想获得与终端相同的输出

Ps.:这只是一个例子,我真的不需要列出目录。

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

当然,您可能想要检查proc.waitFor()返回的 exitCode,并对错误流做一些更好的处理,然后将其发送到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

并查看 blah 目录中的所有内容。这将等待该过程完成,然后再执行任何其他命令。

查看Process的 groovy 文档。那里有很多有趣的东西。

于 2012-12-01T01:56:02.007 回答