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

Dan*_*ner 6 stdout ghostscript stderr

我正在使用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:
...
Run Code Online (Sandbox Code Playgroud)

请注意,2>/dev/null上述内容不会抑制错误消息.Ghostscript的文档已经警告过,写入stdout需要使用-q标志来抑制stdout上的消息,但我似乎仍然缺少一些东西.

Kur*_*fle 14

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

/usr/bin/gs -q        \
     -sstdout=%stderr \
     -sDEVICE=jpeg    \
     -dBATCH          \
     -dNOPAUSE        \
     -dLastPage=1     \
     -r300            \
     -sOutputFile=-   \
     - < test.txt 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢,pipitas - 这正是我想要的.我必须明确指定`-sstdout =/dev/null`,因为`%sstderr`会在当前目录中创建一个命名相同的文件.供将来参考,以下是讨论补丁的原始邮件列表主题:http://www.ghostscript.com/pipermail/gs-code-review/2001-March/000273.html (2认同)