在调用Racket函数而不使用out to string后获取EOF

在调用Racket函数而不使用out to string后获取EOF,racket,Racket,我不明白为什么下面的代码会首先打印“eof”(在交互窗口上)。我在用球拍 (find-first-path (car (regexp-split #px"\n" (with-output-to-string (λ () (system "find /usr/lib/ -name libpython2.7.so")))))) 系统库函数启动接受其输入的shell进程 从(当前输入端口)。在DrRacket中,这会导致创建(短- 活动)交互窗口的

我不明白为什么下面的代码会首先打印“eof”(在交互窗口上)。我在用球拍

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

系统
库函数启动接受其输入的shell进程 从(当前输入端口)。在DrRacket中,这会导致创建(短- 活动)交互窗口的子窗口,您可以在其中键入 您希望被视为子流程的输入

例如,试着运行这个程序

#lang racket

(system "cat")
您在输入窗口中键入的每一行都将通过管道传输到 cat过程。但是,当您完成时,您需要一种方法将EOF发送到 子流程。这就是右边的“EOF”按钮的作用

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

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

系统
库函数启动接受其输入的shell进程 从(当前输入端口)。在DrRacket中,这会导致创建(短- 活动)交互窗口的子窗口,您可以在其中键入 您希望被视为子流程的输入

例如,试着运行这个程序

#lang racket

(system "cat")
您在输入窗口中键入的每一行都将通过管道传输到 cat过程。但是,当您完成时,您需要一种方法将EOF发送到 子流程。这就是右边的“EOF”按钮的作用

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

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

在交互窗口上?你是说对话吗?如果是,你能附上它的截图吗?谢谢,但是John已经在交互窗口上回答了这个问题?你是说对话吗?如果是,你能附上它的屏幕截图吗?谢谢,但是John已经回答了这个问题。我在DrRacket的页脚处也看到了这条消息“subprocess:probled(execute)access to/bin/sh”。我也不想看到此消息。我不能确定,但我怀疑此消息来自DrRacket默认启用的自动编译。你可以禁用它,但你可能不想;它还将阻止自动检测其他语法错误。我建议,如果这不太麻烦您,您可以忽略它。我还在DrRacket的页脚处看到这条消息“subprocess:probled(execute)access to/bin/sh”。我也不想看到此消息。我不能确定,但我怀疑此消息来自DrRacket默认启用的自动编译。你可以禁用它,但你可能不想;它还将阻止自动检测其他语法错误。我建议,如果你不太在意它,你可以忽略它。