2

基本上,

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

在他们之后,我确实得到了hello4 次指示echo hello确实运行了。为什么会这样?((force-output)也没有改变任何东西。)

编辑:我将 SBCL 与 SLIME 一起使用。正如评论中所建议的,这在从终端运行时按预期工作(我得到了输出)。

4

1 回答 1

4

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

如果您uiop:wait-process对返回的流程信息发出 a launch-program,则会出现您的输出。

我想这是一种竞争条件,其中 swank 或 slime 在执行其他操作之前无法获取输出。我认为launch-program.

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

于 2019-08-30T20:38:38.760 回答