Запрет Ghostscript от записи ошибок в стандартный вывод - PullRequest
6 голосов
/ 28 июля 2010

Я использую 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, но я все еще здесь что-то упускаю.

1 Ответ

14 голосов
/ 28 июля 2010

Если вы хотите действительно тишина Ghostscript, измените вашу командную строку следующим образом:

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

Добавление -sstdout=%stderr позволяет перенаправлять стандартный вывод Postscript, но при этом разрешать драйверынаписать на стандартный вывод.(Этот патч в Ghostscript с ~ 2001 года, 22 сентября.)

...