Tôi có một tập lệnh Groovy đệ quy qua một thư mục tìm kiếm các tệp .png và gọi pngquant (một tiện ích dòng lệnh) trên mỗi tệp. Đầu ra của pngquant nên được in trên thiết bị đầu cuối. Các mã có liên quan là:bắt đầu quá trình ghi trong 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)
}
}
Các kịch bản hoạt động tốt, nhưng một khi tất cả các tập tin đã được xử lý, có vẻ như mập mạp vẫn đang được chuyển hướng, vì nhắc lệnh không bao giờ xuất hiện, trừ khi tôi giết chết quá trình với Ctrl + C. Tôi có cần phải bằng cách nào đó "hoàn tác"
pngquantCmd.consumeProcessOutput(System.out, System.err)
hoặc có cách nào tốt hơn để chuyển hướng đầu ra của quy trình này sang bảng điều khiển không? Tôi đoán tôi có thể giải quyết vấn đề này chỉ đơn giản bằng cách thêm System.exit(0)
, nhưng điều này dường như không phải là giải pháp đúng. Vấn đề chỉ xảy ra trên Linux.
'waitForProcessOutput (System.out, System.err)' có hoạt động tốt hơn không? –
@tim_yates vâng, nó hoạt động tốt hơn rất nhiều, cảm ơn rất nhiều! Nếu bạn đăng câu trả lời đó, tôi sẽ chấp nhận nó –