我希望在同一进程下运行多个控制台。我想这样做:
(format console1 "foo") ;prints to iterm tab1
(format console2 "bar") ;prints to iterm tab2
(format t "baz") ;prints to slime repl
我也希望能够从所有3个流中读取。 Slime将保留标准REPL,但我想为2个术语构建自定义REPL
答案 0 :(得分:4)
使用MAKE-BROADCAST-STREAM
。例如:
(setf *standard-output*
(make-broadcast-stream *standard-output*
(open #P"/tmp/log.out" :direction :output)))
这会将所有标准输出重定向到由当前*standard-output*
和新流组成的广播流,并在文件中写入。如果在此重定向后编写命令,则应该能够观察正在写入的文件。
另请注意,没有任何参数(make-broadcast-stream)
是您通常构建接收器流的方式,有点像/dev/null
。
从多个流中读取是不同的。如果它们同时发出输入,你如何决定应该优先考虑哪一个?您是否需要单独的线程并行读取输入并以同步方式推送到单个流中?