我喜欢执行命令并将其 stdout 和 stderr 复制到日志文件中。
我喜欢跑步:
p = myexecute("ls -l /tmp/")
并且本质上具有相同的 Process 对象返回为:
p = "ls -l /tmp/".execute()
不同之处在于 stdout/stderr 被复制到所述日志文件中。我确信在 groovy 中有一种简单的方法可以做到这一点,但我还不够 groovy 看到它。
我喜欢执行命令并将其 stdout 和 stderr 复制到日志文件中。
我喜欢跑步:
p = myexecute("ls -l /tmp/")
并且本质上具有相同的 Process 对象返回为:
p = "ls -l /tmp/".execute()
不同之处在于 stdout/stderr 被复制到所述日志文件中。我确信在 groovy 中有一种简单的方法可以做到这一点,但我还不够 groovy 看到它。
这个答案姗姗来迟,但一种解决方案可能是:
import groovy.ui.SystemOutputInterceptor
File logFile = new File('stdout.log')
new SystemOutputInterceptor({logFile << it; true}).start()
...
更好的解决方案可能是:
def logFile = new File( '/tmp/log.txt' )
logFile.withWriter('UTF-8') { sout ->
p = "ls -l /tmp/".execute()
p.waitForProcessOutput(sout, sout)
}
因为这将等待该过程完成
你是对的,这很简单:
logFile.withWriter('UTF-8') { sout ->
p = "ls -l /tmp/".execute()
p.consumeProcessOutput(sout, sout)
}
这会将两个流写入同一个文件。