Mam skrypt Groovy, który powtarza się przez katalog szukający plików .png, i wywołuje pngquant (narzędzie wiersza poleceń) na każdym z nich. Wyjście pngquant powinno być wydrukowane na terminalu. Odpowiedni kod jest:Przechwytywanie danych wyjściowych w 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)
}
}
Skrypt działa poprawnie, ale gdy wszystkie pliki zostały przetworzone, wydaje się, że mocny jest nadal przekierowywane, ponieważ polecenia prompt nigdy nie pojawia się chyba zabiję proces z Ctrl + C. Czy muszę jakoś "cofnąć" lub czy istnieje lepszy sposób przekierowania wyników tego procesu do konsoli? Myślę, że mógłbym rozwiązać ten problem, po prostu dodając System.exit(0)
, ale to nie wydaje się być właściwym rozwiązaniem. Problem występuje tylko w systemie Linux.
Czy funkcja 'waitForProcessOutput (System.out, System.err) działa lepiej? –
@tim_yates tak, działa dużo lepiej, bardzo dziękuję! Jeśli napiszesz to jako odpowiedź, zaakceptuję to –