我想在CL / CCL中为mpg123控制台mp3播放器编写一个简单的包装器,并想知道如何写入mpg123,它作为一个衍生过程存在:
(let* ((p (run-program "mpg123" '("-R") :input :stream :output :stream :wait nil))
(s (external-process-input-stream p)))
(write "LOAD /path/to/file.mp3" :stream s)
(write-char #\return s))
但是这段代码不起作用,我有点卡住了。有什么想法吗?
答案 0 :(得分:3)
警告经纪人:我没有方便的Clozure实例,我假设此run-program
来自CCL扩展。
几乎可以肯定,mpg123
可能还没有接收到你的输出,因为在所有主流系统中,I / O(默认情况下)都会被缓冲,直到达到一些缓冲区大小限制。在(finish-output s)
之后添加#'write-char
可能会有所帮助。
如果您不担心立即阅读任何回复(例如,如果您在循环中排队长播放列表),请参阅http://clhs.lisp.se/Body/f_finish.htm - force-output
可能更合适,但在实践中,它们有点可以互换。