我正在尝试在 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 的情况下,流的元素类型是 a flexi-streams:octect
(它是 a (unsigned-byte 8)
)。我希望至少在这种情况下run-program
读取原始字节没有很多问题。相反,我收到一条消息Don't know how to copy to stream of element-type (UNSIGNED-BYTE 8)