防止Ghostscript将错误写入标准输出

时间:2010-07-28 10:29:44

标签: stdout stderr ghostscript

我正在使用Ghostscript将PDF文件的第一页栅格化为JPEG。为避免创建临时文件,PDF数据通过管道传输到Ghoscripts的stdin中,JPEG在stdout上“耗尽”。这个管道就像一个魅力,直到GS收到无效的PDF数据:而不是像我期望的那样在stderr上报告所有错误消息,它仍然会将一些消息写入 stdout

重现:

$ 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需要-q标志来禁止stdout上的消息,但我似乎仍然遗漏了一些东西。

1 个答案:

答案 0 :(得分:13)

如果你想真的沉默Ghostscript,请修改你的命令行:

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

添加-sstdout=%stderr允许重定向Postscript stdout,同时仍然允许驱动程序写入stdout。 (自2001年9月22日起,该补丁在Ghostscript中)。