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

发布于 2024-09-11 22:55:17 字数 587 浏览 10 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

太阳公公是暖光 2024-09-18 22:55:17

如果您想真正静默 Ghostscript,请像这样修改命令行:

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

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

If you want to really silence Ghostscript, modify your command line like this:

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

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.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文