Я пытаюсь запустить внешнюю программу в 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-streams: octect
(который представляет собой (беззнаковый байт 8)
).
Я ожидаю, что, по крайней мере, в этом случае run-program
прочитает необработанные байты без особых проблем. Вместо этого я получаю сообщение типа Не знаю, как скопировать в поток типа элемента (UNSIGNED-BYTE 8)