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

标签 stdout stderr 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 的文档已经警告说写入标准输出需要 -q标志来抑制标准输出上的消息,但我似乎仍然在这里遗漏了一些东西。

最佳答案

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

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

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

关于stdout - 防止 Ghostscript 将错误写入标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3351967/

相关文章:

bash - 根据变量状态重定向命令的输出

PDF - 去除白边

linux - 有没有办法刷新正在运行的进程的标准输出

linux - 将 stderr 和 stdout 重定向到 Bash 中的文件的不同方法?

node.js - 仅将标准输出重定向到/dev/null

bash - 在 bash 中静音 docker rm 命令

php - 如何在 Linux 系统上用 PHP 启动后台进程并将用户 ajax 输入重复写入其标准输入

Ghostscript PDF 转 PNG : output is always 595x842 (A4)

ruby - 禁用将输出放入 RSpec

stdout - 如何在 vxWorks 中将文件内容打印到标准输出?