Препятствуйте тому, чтобы Ghostscript писал ошибки в стандартный вывод

Я использую Ghostscript для растеризации первой страницы файла PDF к JPEG. Чтобы постараться не создавать tempfiles, данные PDF передаются по каналу в stdin Ghoscripts, и JPEG "истощен" на stdout. Этот конвейер работы как очарование до 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 но я все еще, кажется, пропускаю что-то здесь.

6
задан Daniel Werner 28 July 2010 в 10:29
поделиться

1 ответ

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

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

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

14
ответ дан 8 December 2019 в 17:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: