2012-05-14 12 views
3

나는 명령을 실행하고 stdout과 stderr를 로그 파일에 복사하려고한다.그루비 티를 어떻게 만드나요?

내가 실행하고자 :

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

그리고 본질적으로는 동일한 프로세스 개체로 반환이 :/표준 오류가 복사 표준 출력의 차이로

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

로그 파일은 말했다. 그루비에서이 작업을 수행 할 수있는 간단한 방법이있을 것이라고 확신하지만, 아직 충분히 볼만하지는 않습니다. 네 말이 맞아

답변

0

, 그것은 간단합니다

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

이 같은 파일을 모두 스트림을 작성합니다. 프로세스가이 답변이 늦은 감

+0

아, 멋지다! 그러나 내가 원하는 것이 아니라, 내 질문에 불분명하다면 미안해. 저는 스트림에서 "수신"하고 그들을 소비하지 않고 파일에 복사하는 것을 좋아합니다. 유닉스 명령어 [tee] (http://en.wikipedia.org/wiki/Te_ (command))와 같습니다. – Spotty

+1

간단합니다 : 자신 만의'FilterWriter'를 구현하고'sout'을 그것으로 싸십시오. –

1

참조 be :

import groovy.ui.SystemOutputInterceptor 

File logFile = new File('stdout.log')                     
new SystemOutputInterceptor({logFile << it; true}).start() 
... 
+0

물론 아파치 공유지의 [TeeOutputStream] (http://commons.apache.org/io/apidocs/org/apache/commons/io/output/TeeOutputStream.html)과 같은 내용이 더 완벽 할 수도 있습니다. 당신은 아마 후 ... 솔루션입니다 –

1

를 완료하기 위해이 같이

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

기다릴 것이다, 그러나 하나 개의 솔루션은 할 수 자세한 예를 들어

는 더 나은 솔루션이 될 수 http://groovy.codehaus.org/Process+Management

관련 문제