3

コマンドを実行して、その stdout と stderr をログファイルにコピーするのが好きです。

走ることが好きです:

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

基本的に、同じ Process オブジェクトが次のように返されます。

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

stdout/stderr が上記のログファイルにコピーされるという違いがあります。Groovy でこれを行う簡単な方法があると確信していますが、私はまだ十分に Groovy ではありません。

4

3 に答える 3

2

この答えは長い間遅れていますが、1つの解決策は次のとおりです。

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 に答える