2012-07-20 12 views
11

私はGroovyスクリプトを使用して、.pngファイルを探すディレクトリを再帰的に実行し、それぞれにpngquant(コマンドラインユーティリティ)を呼び出します。 pngquantの出力は端末に出力されるべきです。関連するコードは次のとおりです。Groovyでプロセス出力を取得する

def command = "pngquant -f -ext .png" 

root.eachFileRecurse(groovy.io.FileType.FILES) {File file -> 

    if (file.name.endsWith('.png')) { 
     println "Compressing file: $file" 

     def imgCommand = "$command $file.absolutePath" 

     Process pngquantCmd = imgCommand.execute() 
     pngquantCmd.consumeProcessOutput(System.out, System.err)   
    } 
} 

スクリプトが正常に動作しますが、すべてのファイルが処理された後、私はCtrlキーを使用してプロセスを強制終了しない限り、コマンド・プロンプトが表示されませんので、スタウトはまだリダイレクトされているようです + C。私は何とか

pngquantCmd.consumeProcessOutput(System.out, System.err)   

またはコンソールに、このプロセスの出力をリダイレクトするためのより良い方法があるが、「元に戻す」する必要がありますか?私はSystem.exit(0)を追加するだけでこの問題を解決できると思いますが、これは正しい解決策のようには見えません。問題はLinuxでのみ発生します。

+0

waitForProcessOutput(System.out、System.err)はうまく動作しますか? –

+0

@tim_yatesはい、それはずっと良くなりました、ありがとうございます!あなたが答えとしてそれを投稿すれば、私はそれを受け入れるでしょう –

答えて

19

代わりの出力を読み、関係なく、プロセスの状況の上耕すするスレッドのカップルを開始します

pngquantCmd.consumeProcessOutput(System.out, System.err)   

、あなたがプロセスの出力をリダイレクトします

pngquantCmd.waitForProcessOutput(System.out, System.err) 

を試してみてください移動する前にそれが完了するのを待つ:-)

0

Process pngquantCmd = imgCommand.execute(); 
def output= pngquantCmd .in.text; 
println("Output : " + output); 
関連する問題