Groovy将 execute
方法添加到 String
以使执行shell相当容易;
println "ls".execute().text
但如果发生错误,则没有结果输出 . Is there an easy way to get both the standard error and standard out? (除了创建一堆代码;创建两个线程来读取两个输入流,然后使用父流等待它们完成然后将字符串转换回文本?)
有类似的东西会很高兴;
def x = shellDo("ls /tmp/NoFile")
println "out: ${x.out} err:${x.err}"
7 回答
好的,我自己解决了;
显示:
out> err> ls: cannot access /badDir: No such file or directory
"ls".execute()
返回Process
对象,这就是"ls".execute().text
的工作原理 . 您应该能够只读取错误流以确定是否有任何错误 .Process
上有一个额外的方法,允许您传递StringBuffer
来检索文本:consumeProcessErrorStream(StringBuffer error)
.例:
在上面提供的答案中添加一个更重要的信息 -
对于一个过程
总是试着用
而不是
在groovy中执行命令后捕获输出,因为后者是阻塞调用(SO question for reason) .
我发现这更像是惯用的:
正如另一篇文章提到的,这些是阻塞调用,但由于我们想要使用输出,这可能是必要的 .
但如果命令失败,进程将终止