2010-07-28 7 views
6

Ich verwende Ghostscript, um die erste Seite einer PDF-Datei zu JPEG zu rasterisieren. Um die Erstellung von Templates zu vermeiden, werden die PDF-Daten in Ghostscript's Standard eingefügt und das JPEG wird auf dem Standardoutput "drainiert". Diese Pipeline funktioniert wie ein Zauber, bis GS ungültige PDF-Daten empfängt: Anstatt alle Fehlermeldungen auf stderr zu melden, wie ich es erwartet hätte, schreibt es stattdessen einige der Nachrichten stattdessen in stdout.Verhindern, dass Ghostscript Fehler in die Standardausgabe schreibt

zu reproduzieren:

$ 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: 
... 

Notiere die 2>/dev/null oben nicht die Fehlermeldungen nicht unterdrückt. Die Ghostscript-Dokumentation warnte bereits, dass das Schreiben auf stdout das Flag -q zur Unterdrückung von Nachrichten auf stdout erfordert, aber mir scheint hier noch etwas zu fehlen.

Antwort

11

Wenn Sie wirklich Schweigen Ghost wollen, Ihre Befehlszeile wie folgt ändern:

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

Die Zugabe von -sstdout=%stderr Postscript stdout umgeleitet werden können, während immer noch so dass die Fahrer auf die Standardausgabe zu schreiben. (Dieser Patch ist in Ghostscript seit ~ 2001, 22. September.)

+2

Danke, Pipitas - das ist genau das, was ich gesucht habe. Ich musste "-sstdout =/dev/null" explizit angeben, da '% sstderr' eine gleichnamige Datei im aktuellen Verzeichnis erstellen würde. Für zukünftige Referenz, hier ist die ursprüngliche Mailing-Liste Thread Diskussion über den Patch: http://www.ghostscript.com/pipermail/gs-code-review/2001-March/000273.html –

+1

Es ist ein Tippfehler da drüben. Es sollte "% stderr" sein ohne die Doppel- –

+0

Thx, @ EdwardB, Sie sind richtig. Ich habe es repariert. –

Verwandte Themen