使用-out-to-string调用Racket函数后获取EOF

时间:2016-04-15 20:26:45

标签: racket

我无法弄清楚为什么下面的代码会首先打印" eof" (在交互窗口上)。我正在使用DrRacket。

(find-first-path (car 
    (regexp-split #px"\n" 
        (with-output-to-string
            (λ () (system "find /usr/lib/ -name
libpython2.7.so"))))))

1 个答案:

答案 0 :(得分:2)

system库函数启动一个接受其输入的shell进程 来自(current-input-port)。在DrRacket中,这会导致创建一个( “交互”窗口的子窗口,您可以在其中键入输入 您希望被视为子流程的输入。

因此,例如,尝试运行此程序

#lang racket

(system "cat")

您在输入窗口中键入的每一行都将被管道传输到 猫的过程。但是,当你完成后,你需要一种方法来发送EOF 子流程。这就是右边的“EOF”按钮。

如果您不想看到此窗口,可以创建一个空输入流 到您的子流程,例如:

(parameterize ([current-input-port (open-input-string "")])
  (system "find /usr/lib/ -name libpython2.7.so"))