Чтение двоичного вывода внешней программы в Common Lisp
Я пытаюсь запустить внешнюю программу в SBCL и записать ее вывод. Результатом являются двоичные данные (изображение в формате png), в то время как SBCL настаивает на интерпретации их как строк.
Я пробовал несколько способов, как
(trivial-shell:shell-command "/path/to/png-generator" :input "some input")
(with-input-from-string (input "some input")
(with-output-to-string (output)
(run-program "/path/to/png-generator" () :input input :output output))
(with-input-from-string (input "some input")
(flexi-streams:with-output-to-sequence (output)
(run-program "/path/to/png-generator" () :input input :output output))
Но я получаю такие ошибки, как
Illegal :UTF-8 character starting at byte position 0.
Мне кажется, что SBCL пытается интерпретировать двоичные данные как текст и декодировать их. Как мне изменить это поведение? Меня интересует только получение вектора октетов.
Изменить: так как это не ясно из текста выше, я хотел бы добавить, что, по крайней мере, в случае flexi-stream, тип элемента потока являетсяflexi-streams:octect
(который является(unsigned-byte 8)
). Я бы ожидал, по крайней мере, в этом случаеrun-program
читать сырые байты без особых проблем. Вместо этого я получаю сообщение какDon't know how to copy to stream of element-type (UNSIGNED-BYTE 8)