Groovy添加了该execute方法,String以使执行Shell变得相当容易。println "ls".execute().text但是如果发生错误,则没有结果输出。 是否有一种简单的方法可以同时消除标准错误和标准? (除了创建一堆代码;创建两个线程来读取两个输入流,然后使用父流等待它们完成,然后将字符串转换回文本?)有这样的事情会很好; def x = shellDo("ls /tmp/NoFile") println "out: ${x.out} err:${x.err}"
3 回答

慕桂英3389331
TA贡献2036条经验 获得超8个赞
好吧,我自己解决了;
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
TA贡献1936条经验 获得超6个赞
"ls".execute()返回一个Process对象,这就是为什么"ls".execute().text起作用。您应该能够只读取错误流,以确定是否存在任何错误。
上还有一个额外的方法,Process可让您传递StringBuffer来检索文本:consumeProcessErrorStream(StringBuffer error)。
例:
def proc = "ls".execute()
def b = new StringBuffer()
proc.consumeProcessErrorStream(b)
println proc.text
println b.toString()
添加回答
举报
0/150
提交
取消