为了账号安全,请及时绑定邮箱和手机立即绑定

Groovy执行Shell命令

Groovy执行Shell命令

炎炎设计 2019-12-09 15:11:01
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


查看完整回答
反对 回复 2019-12-09
?
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()


查看完整回答
反对 回复 2019-12-09
  • 3 回答
  • 0 关注
  • 1983 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信