>

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

스크립트는 제대로 작동하지만 모든 파일을 처리 한 후에는Ctrl+C. 어떻게 든 "실행 취소"해야합니까?

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

또는이 프로세스의 출력을 콘솔로 리디렉션하는 더 좋은 방법이 있습니까? System.exit(0) 를 추가 하여이 문제를 해결할 수 있다고 생각합니다. 그러나 이것이 올바른 솔루션처럼 보이지는 않습니다. 문제는 Linux에서만 발생합니다.

  • 답변 # 1

    대신

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

    프로세스 상황에 관계없이 출력을 읽고 쟁기질을하기 위해 몇 개의 스레드를 시작하려면 시도해야합니다

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

    프로세스 출력을 리디렉션 한 다음 진행하기 전에 기다립니다 :-)

  • 답변 # 2

    또한 할 수 있습니다

    Process pngquantCmd = imgCommand.execute();
    def output= pngquantCmd .in.text;
    println("Output : " + output);
    
    

관련 자료

  • 이전 regex - 아파치에게 LocationMatch와 반대로 말하는 방법?
  • 다음 css - Less에서 다른 요소 값을 얻는 방법이 있습니까?