2010-07-28 4 views
6

J'utilise Ghostscript pour pixelliser la première page d'un fichier PDF au format JPEG. Pour éviter de créer des fichiers temp, les données PDF sont redirigées vers le fichier stdin de Ghoscripts et le fichier JPEG est "drainé" sur stdout. Ce pipeline fonctionne comme un charme jusqu'à ce que GS reçoive des données PDF invalides: Au lieu de signaler tous les messages d'erreur sur stderr comme je l'aurais prévu, il écrit encore certains des messages à stdout à la place.Empêche Ghostscript d'écrire des erreurs sur la sortie standard

Reproduire:

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

Notez le 2>/dev/null ci-dessus ne supprime pas les messages d'erreur. La documentation de Ghostscript a déjà averti qu'écrire sur stdout nécessite l'indicateur -q pour supprimer les messages sur stdout, mais il me semble toujours qu'il manque quelque chose ici.

Répondre

11

Si vous voulez vraiment silence Ghostscript, modifiez votre ligne de commande comme ceci:

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

L'ajout de -sstdout=%stderr permet stdout postscript d'être redirigé, tout en permettant aux conducteurs d'écrire à stdout. (Ce patch est dans Ghostscript depuis ~ 22 septembre 2001)

+2

Merci, pipitas - c'est exactement ce que je cherchais. J'ai dû spécifier explicitement '-sstdout =/dev/null', cependant,'% sstderr' créerait un fichier du même nom dans le répertoire courant. Pour référence future, voici le fil de la liste de diffusion d'origine discutant du correctif: http://www.ghostscript.com/pipermail/gs-code-review/2001-March/000273.html –

+1

Il y a une faute de frappe là-bas. Il devrait être '% stderr' sans le double s –

+0

Thx, @EdwardB, vous avez raison. Je l'ai corrigé. –

Questions connexes