18

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

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)        
    }
}

スクリプトは正常に動作しますが、すべてのファイルが処理されると、 stout がまだリダイレクトされているように見えます。これは、Ctrl+でプロセスを強制終了しない限り、コマンド プロンプトが表示されないためCです。どういうわけか「元に戻す」必要がありますか

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

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

4

2 に答える 2

29

それ以外の

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

プロセスの状況に関係なく、出力を読み取って処理するためにいくつかのスレッドを開始します。試してみてください。

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

プロセス出力をリダイレクトし、次に進む前に終了するのを待ちます:-)

于 2012-07-20T13:09:29.897 に答える
5

あなたもできる

Process pngquantCmd = imgCommand.execute();
def output= pngquantCmd.text;
println("Output : " + output);
于 2014-08-13T17:38:44.060 に答える