2010-07-28 39 views
6

我使用Ghostscript将PDF文件的第一页光栅化为JPEG。为避免创建临时文件,将PDF数据传送到Ghoscripts的标准输入中,并且JPEG在标准输出上“排空”。直到GS接收到无效的PDF数据为止,这个管道就像一个魅力一样:不是按照我的预期报告stderr上的所有错误消息,而是将一些消息写入stdout防止Ghostscript将错误写入标准输出

重现:

$ 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标志来抑制标准输出上的消息,但我仍然在这里错过了一些东西。

回答

11

如果你想真正沉默 Ghostscript的,修改您的命令行是这样的:

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

添加的-sstdout=%stderr允许后记标准输出重定向,同时还让司机写到标准输出。 (该修补程序自〜2001年9月22日起在Ghostscript中)

+2

谢谢,pipitas - 这正是我所期待的。但是,我必须明确指定'-sstdout =/dev/null',因为'%sstderr'会在当前目录中创建一个类似命名的文件。 为了将来的参考,这里是讨论补丁的原始邮件列表主题: http://www.ghostscript.com/pipermail/gs-code-review/2001-March/000273.html – 2010-08-03 08:12:35

+1

这里有一个错字。它应该是'%stderr'没有双s – 2015-07-09 22:28:15

+0

Thx,@EdwardB,你是对的。我修好了它。 – 2015-07-09 22:35:08

相关问题