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



我不明白为什么下面的代码会首先打印"eof"(在交互窗口上)。我正在使用DrRacket。

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

system库函数启动一个接受其输入的shell进程来自(当前输入端口)。在DrRacket中,这导致创建-live)子窗口,您可以在其中输入您希望被视为子流程的输入。

例如,试着运行这个程序

#lang racket
(system "cat")

您在输入窗口中键入的每一行都将通过管道传输到cat过程。不过,当你完成后,你需要一种方式将EOF发送到子流程。这就是右边的"EOF"按钮的作用。

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

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