を、次の作品中:はSBCL SB-EXTで働く入力ストリームを取得できません:実行プログラム
(let* ((i (make-string-input-stream "foo bar baz"))
(p (sb-ext:run-program "/bin/cat" '()
:input i :output *trace-output* :wait t)))
(sb-ext:process-close p))
以下のコードはない - それは "001" を書いた後、停止します。
(let* ((_1 (format t "001~%"))
(p (sb-ext:run-program "/bin/cat" '()
:input :stream :output *trace-output* :wait t))
(_2 (format t "010~s~%" p))
(s (sb-ext:process-input p)))
(declare (ignore _1 _2))
(format s "foo bar baz~%")
(finish-output s)
(sb-ext:process-close p))
それでは、黙ってsb-ext:run-program
に実行を残しているようです。
これは、Ubuntu 16.04.1のSBCL 1.3.6と同じです。
アイデア?事前に感謝、フランク
':T 'は、プロセスが終了するまで待つ意味WAIT。 – jkiiski
':T 'が作業の場合にも、両方のケースであり待って - そう、これは説明することはできません。また、 'sb:ext-run-program'が独自の実行を残しているという問題ではなく、' let'ブログ全体がログ出力を表示せずに残っています - これは ':wait nil'でも期待されません。とにかくありがとう、 –
最初のケースでは、それに文字列入力ストリームを与えています。 'cat'はEOFまで入力を読み込んでから復帰します。 2番目の例ではストリームに何も書き込んでいないので、EOFは存在しません。また、 'cat'はより多くの入力を永久に待っています。 – jkiiski