2010-07-28 56 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

相關問題