我有一个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上。
答案 0 :(得分:24)
而不是
pngquantCmd.consumeProcessOutput(System.out, System.err)
无论进程情况如何,都会启动几个线程来读取输出并进行操作,您应该尝试
pngquantCmd.waitForProcessOutput(System.out, System.err)
这将重定向过程输出,然后等待它继续前进: - )
答案 1 :(得分:2)
您也可以
Process pngquantCmd = imgCommand.execute();
def output= pngquantCmd .in.text;
println("Output : " + output);