18

我有一个 Groovy 脚本,它通过一个目录递归查找 .png 文件,并在每个文件上调用pngquant(一个命令行实用程序)。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 回答