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
編集:上記のテキストからは明確ではないため、少なくとも flexi-stream の場合、ストリームの要素タイプは a ( a ) であることを追加したいと思います(unsigned-byte 8)
。少なくともこの場合run-program
、多くの問題なしに生のバイトを読み取ることが期待されます。代わりに、次のようなメッセージが表示されますDon't know how to copy to stream of element-type (UNSIGNED-BYTE 8)