Groovy 你怎么做一件漂亮的T恤?

Groovy 你怎么做一件漂亮的T恤?,groovy,Groovy,我喜欢执行命令并将其stdout和stderr复制到日志文件中 我喜欢跑步: p = myexecute("ls -l /tmp/") 并返回与以下相同的流程对象: p = "ls -l /tmp/".execute() 不同的是,stdout/stderr被复制到所述日志文件中。我相信在groovy中有一种简单的方法可以做到这一点,但我还没有足够的groovy能力去了解它。你说得对,它很简单: logFile.withWriter('UTF-8') { sout -> p =

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

我喜欢跑步:

p = myexecute("ls -l /tmp/")
并返回与以下相同的流程对象:

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

不同的是,stdout/stderr被复制到所述日志文件中。我相信在groovy中有一种简单的方法可以做到这一点,但我还没有足够的groovy能力去了解它。

你说得对,它很简单:

logFile.withWriter('UTF-8') { sout ->
    p = "ls -l /tmp/".execute()
    p.consumeProcessOutput(sout, sout)
}
这将把两个流写入同一个文件


有关更多示例,请参见更好的解决方案可能是:

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

由于这将等待流程完成

这个答案早就应该给出了,但一个解决方案可能是:

import groovy.ui.SystemOutputInterceptor

File logFile = new File('stdout.log')                                                                                
new SystemOutputInterceptor({logFile << it; true}).start() 
...
import groovy.ui.SystemOutputInterceptor
File logFile=新文件('stdout.log')

新的SystemOutputInterceptor({logFile啊,太酷了!但不是我想要的,如果我不清楚我的问题,很抱歉。我喜欢“收听”这很简单:实现您自己的
FilterWriter
并使用它包装
sout
。当然,除了类似于apache commons的东西之外,这可能是您可能追求的更完整的解决方案……从Groovy 2.4.6开始,它就是:新的SystemOutputInterceptor({id,text->logFile