2010-07-28 5 views
6

Ghostscript를 사용하여 PDF 파일의 첫 번째 페이지를 JPEG로 래스터 화합니다. 임시 파일 생성을 피하기 위해 PDF 데이터는 Ghoscript의 stdin으로 파이프되며 JPEG는 stdout에서 "유출"됩니다. 이 파이프 라인은 GS가 유효하지 않은 PDF 데이터를받을 때까지 매력처럼 작동합니다. 예상했던대로 stderr에 모든 오류 메시지를보고하는 대신 메시지 중 일부는 여전히 stdout에 기록합니다. Ghostscript가 표준 출력에 오류를 쓰는 것을 방지합니다.

재현하려면

$ echo "Not a PDF" >test.txt 
$ /usr/bin/gs -q -sDEVICE=jpeg -dBATCH -dNOPAUSE -dFirstPage=1 -dLastPage=1 \ 
    -r300 -sOutputFile=- - < test.txt 2>/dev/null 
Error: /undefined in Not 
Operand stack: 

Execution stack: 
... 

참고 2>/dev/null 위의 오류 메시지를 표시하지 않습니다. Ghostscript의 문서는 이미 stdout에 쓰려면 stdout에 메시지를 표시하지 않기 위해 -q 플래그가 필요하다고 경고했으나 여전히 여기에 뭔가 빠져있는 것처럼 보입니다.

답변

11

당신이 정말 침묵 고스트하려면, 다음과 같이 명령 줄을 수정

/usr/bin/gs -q  \ 
    -sstdout=%stderr \ 
    -sDEVICE=jpeg \ 
    -dBATCH   \ 
    -dNOPAUSE  \ 
    -dLastPage=1  \ 
    -r300   \ 
    -sOutputFile=- \ 
    - < test.txt 2>/dev/null 

-sstdout=%stderr의 추가는 여전히 허용하는 드라이버를 표준 출력에 기록하면서 포스트 스크립트 표준 출력을 리디렉션 할 수 있습니다. (이 패치는 ~ 2001 년 9 월 22 일 이후 Ghostscript에 있습니다.)

+2

감사합니다. pipitas - 이것은 내가 찾고있는 것입니다. 그러나'% sstderr'은 현재 디렉토리에 비슷한 이름의 파일을 생성하기 때문에 명시 적으로'-sstdout =/dev/null'을 지정해야했습니다. 나중에 참조 할 수있는 패치를 논의하는 원본 메일 링 스레드는 다음과 같습니다. http://www.ghostscript.com/pipermail/gs-code-review/2001-March/000273.html –

+1

거기에 오타가 있습니다. 더블이없는'% stderr'이어야합니다. –

+0

Thx, @EdwardB, 당신이 맞습니다. 나는 그것을 고쳤다. –

관련 문제