Groovy执行Shell命令

Groovy添加了该execute方法,String以使执行Shell变得相当容易。


println "ls".execute().text

但是如果发生错误,则没有结果输出。 是否有一种简单的方法可以同时消除标准错误和标准? (除了创建一堆代码;创建两个线程来读取两个输入流,然后使用父流等待它们完成,然后将字符串转换回文本?)


有这样的事情会很好;


 def x = shellDo("ls /tmp/NoFile")

 println "out: ${x.out} err:${x.err}"


炎炎设计
浏览 2125回答 3
3回答

慕桂英3389331

好吧,我自己解决了;def sout = new StringBuilder(), serr = new StringBuilder()def proc = 'ls /badDir'.execute()proc.consumeProcessOutput(sout, serr)proc.waitForOrKill(1000)println "out> $sout err> $serr"显示:out>  err> ls: cannot access /badDir: No such file or directory

LEATH

"ls".execute()返回一个Process对象,这就是为什么"ls".execute().text起作用。您应该能够只读取错误流,以确定是否存在任何错误。上还有一个额外的方法,Process可让您传递StringBuffer来检索文本:consumeProcessErrorStream(StringBuffer error)。例:def proc = "ls".execute()def b = new StringBuffer()proc.consumeProcessErrorStream(b)println proc.textprintln b.toString()
打开App,查看更多内容
随时随地看视频慕课网APP