Common Lisp:uiop:run-program 输出,但 uiop:launch-program 没有



基本上,

(uiop:run-program "echo hello" :output *standard-output*)

输出hello,而没有

(uiop:launch-program "echo hello" :output *standard-output*)
(uiop:launch-program "echo hello" :output #.*standard-output*)
(uiop:launch-program "echo hello" :output :interactive)

输出任何内容;但是,如果我运行

(uiop:run-program "echo hello" :output *standard-output*)

在他们之后,我确实得到了 4 次hello表明echo hello确实跑了。为什么会这样呢?((force-output)也不会改变任何东西。

编辑:我正在使用SBCL和史莱姆。正如评论中所建议的,这在从终端运行它时按预期工作(我得到输出(。

当您查看run-programlaunch-program的实现时,您会发现前者(在这种情况下...(执行wait-process

如果对launch-program返回的进程信息发出uiop:wait-process,则会显示输出。

我猜这是一种竞争条件,其中 swank 或 sslime 在执行其他操作之前无法获取输出。 我认为这是launch-program异步行为所固有的

我认为获取输出的最清晰方法是指定:output :stream,然后在launch-program的返回值上使用调用process-info-output可用的流。

相关内容

  • 没有找到相关文章

最新更新