防止 Ghostscript 将错误写入标准输出
我正在使用 Ghostscript 将 PDF 文件的第一页光栅化为 JPEG。为了避免创建临时文件,PDF 数据通过管道传输到 Ghoscripts 的标准输入,而 JPEG 在标准输出上“排出”。这个管道就像一个魅力,直到 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 上的消息,但我在这里似乎仍然遗漏了一些东西。
I'm using Ghostscript to rasterize the first page of a PDF file to JPEG. To avoid creating tempfiles, the PDF data is piped into Ghoscripts's stdin and the JPEG is "drained" on stdout. This pipeline works like a charm until GS receives invalid PDF data: Instead of reporting all error messages on stderr as I would have expected, it still writes some of the messages to stdout instead.
To reproduce:
$ 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:
...
Note the 2>/dev/null
above does not suppress the error messages. Ghostscript's documentation already warned that writing to stdout requires the -q
flag to suppress messages on stdout, but I still seem to be missing something here.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您想真正静默 Ghostscript,请像这样修改命令行:
添加
-sstdout=%stderr
允许重定向 Postscript stdout,同时仍允许驱动程序写入到标准输出。 (该补丁自 2001 年 9 月 22 日起就在 Ghostscript 中。)If you want to really silence Ghostscript, modify your command line like this:
The addition of
-sstdout=%stderr
allows Postscript stdout to be redirected, while still allowing drivers to write to stdout. (That patch is in Ghostscript since ~2001, Sept 22.)