2017-04-17 4 views
0

JUnit 테스트에서 ghostscript 명령을 실행하고 테스트가 오류로 끝납니다. 그러나 터미널에서 같은 명령을 실행하면 명령이 오류없이 완료됩니다.Java 프로그램에서 Ghostscript를 실행하는 중 오류가 발생했습니다.

Command: /usr/local/bin/gs -sOutputFile="OUTPUT_PATH" -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH "INPUT_PATH" 

Java 런타임을 사용하여 명령을 실행합니다.

Process pr = Runtime.getRuntime().exec(command); 

int exitValue = pr.waitFor(); 

if (exitValue != 0) { 
    .... 
} 

실행 오류.

GPL Ghostscript 9.21: **** Could not open the file "OUTPUT_PATH" . 
+0

확실히 차이점은 GS가 아니라 환경입니다. Java에서 명령을 실행할 때 현재 작업 디렉토리가 쓰기 가능하지 않거나 적어도 현재 사용자에게는 해당되지 않는다고 추측합니다. 이것은 Ghostscript가 쓰기를 위해 출력 파일을 열 수 없음을 의미합니다. 완성 된 경로와 출력 파일을 Java가 작성하도록 허용 된 디렉토리에 지정하십시오. 다른 가능성은 파일이 이미 존재하고 다른 응용 프로그램에서 열려 있다는 것입니다. 다른 (정규화 된) 위치에 다시 쓰는 것은 조심해야하는 한 그것을 방지해야합니다. – KenS

+0

감사합니다. @KenS, JUnit 테스트에서 파일의 전체 경로를 사용합니다. 예를 들어, eclipse에서 target 폴더를 사용하여 파일을 씁니다. Paths.get ("target", "GRAYSCALE_TEST.pdf"); ' – fjtorres

+0

글쎄 그것은 내게 아직도 환경에 대한 문제로 보입니다. Java에 대해서는 아무 것도 모른다는 것을 알기 때문에 이클립스 라인은 내가 두려워하는 것이 아무것도 없다고 알려줍니다. 분명 Ghostscript가 작동하고 있습니다 (쉘에서 작동하기 때문입니다). 그 차이는 그 주변 환경에 있어야합니다. 오류는 매우 명확합니다. Ghostscript가 파일을 열 수 없습니다. 두 가지 이유가 있습니다. 첫째, "wb"를 사용하는 C 런타임 fopen()이 실패했습니다. 두 번째로 파일 이외의 다른 파일 (예 : % stdout % ")로 출력하고 있는데 실패하면 실패합니다. 많이 ** 실제 경로를 전체적으로 인용하는 것이 더 좋으므로 알려줄 수 있습니다. – KenS

답변

0

이 문제는 명령을 작성할 때 출력 경로의 큰 따옴표로 인해 발생합니다.

관련 문제