2016-06-21 64 views
1

我想要写在CL/CCL mpg123的控制台MP3播放器的简单包装,不知道怎么写,其存在的衍生进程mpg123的:Common Lisp的:写外部程序输入

(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)) 

但这代码不工作,我有点卡住了。有任何想法吗?

回答

3

提醒注意事项:我没有Clozure实例,我假设这个run-program来自CCL扩展。

虽然mpg123几乎可以肯定没有收到你的输出,但是,因为在所有主流系统上I/O都是默认缓冲的,直到你达到某个缓冲区大小的限制。在#'write-char之后添加(finish-output s)可能会有所斩获。

请参阅http://clhs.lisp.se/Body/f_finish.htm - force-output如果您不关心立即阅读任何答复(例如,如果您在循环中排队播放长列表),则可能更合适,但实际上它们可以互换。