【问题标题】:Common Lisp: Write to external program inputCommon Lisp:写入外部程序输入
【发布时间】:2016-10-22 20:51:15
【问题描述】:

我想在 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))

但是这段代码不起作用,我有点卡住了。有什么想法吗?

【问题讨论】:

    标签: common-lisp ccl


    【解决方案1】:

    告诫者:我手边没有 Clozure 实例,我假设这个 run-program 来自 CCL 扩展。

    不过,几乎可以肯定的是,mpg123 可能“还”没有收到您的输出,因为在所有主流系统上,I/O (默认情况下)都是缓冲的,直到您达到某个缓冲区大小限制为止。在#'write-char 之后添加(finish-output s) 可能会成功。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 2011-08-19
      • 1970-01-01
      相关资源
      最近更新 更多