3

我喜欢执行命令并将其 stdout 和 stderr 复制到日志文件中。

我喜欢跑步:

p = myexecute("ls -l /tmp/")

并且本质上具有相同的 Process 对象返回为:

p = "ls -l /tmp/".execute()

不同之处在于 stdout/stderr 被复制到所述日志文件中。我确信在 groovy 中有一种简单的方法可以做到这一点,但我还不够 groovy 看到它。

4

3 回答 3

2

这个答案姗姗来迟,但一种解决方案可能是:

import groovy.ui.SystemOutputInterceptor

File logFile = new File('stdout.log')                                                                                
new SystemOutputInterceptor({logFile << it; true}).start() 
...
于 2013-10-12T15:43:20.130 回答
1

更好的解决方案可能是:

def logFile = new File( '/tmp/log.txt' )
logFile.withWriter('UTF-8') { sout ->
    p = "ls -l /tmp/".execute()
    p.waitForProcessOutput(sout, sout)
}

因为这将等待该过程完成

于 2012-05-14T09:05:56.753 回答
0

你是对的,这很简单:

logFile.withWriter('UTF-8') { sout ->
    p = "ls -l /tmp/".execute()
    p.consumeProcessOutput(sout, sout)
}

这会将两个流写入同一个文件。

有关更多示例,请参阅http://groovy.codehaus.org/Process+Management

于 2012-05-14T08:18:23.460 回答