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