我正在使用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上的消息,但我似乎仍然遗漏了一些东西。
答案 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中)。