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

5
задан Marco Righele 14 August 2013 в 07:59
поделиться