从球拍产生或系统

spawn or system from racket

我正在尝试为我的系统编写脚本,以从目录结构填充静态 html 文件。

id 更喜欢使用 racket 来完成任务,但我很难找到一些关键功能,最重要的是生成子进程的能力,例如 C 调用 "system"。

从 racket 内部调用命令行和捕获输出的最简单方法是什么。

实际上有两个函数的工作方式与 C 中的系统相似,它们是:system and system*。 (还有其他产生子进程的方法,但这两种是最简单的,并且与许多其他语言的工作方式非常相似。

在这两个中,system 是更简单的一个,它以字符串的形式接收您想要 运行 的命令。这样您就可以执行以下操作:

(system "ls -l")

虽然使用起来有点复杂,但我更喜欢 system* 一点,因为它将参数作为列表接收,这意味着您可以更轻松地在 Racket 中使用它们。

(system* (find-executable-path "ls") "-l")

现在,你可以做一些事情,比如改变你正在使用的命令的输入和输出端口,甚至可以通过 Racket 的 parameters 改变当前的工作目录。具体来说,您需要 current-directorycurrent-input-portcurrent-output-port.

您还可以使用几个with-函数来更方便地更改输入和输出端口。

把它们放在一起,例如,我可以用下面的代码将 运行ning ls -l 的结果保存为一个字符串。 (注意Racket中有better ways to get the contents of your root directory,这只是一个使用Racket进行shell脚本的例子。)

(parameterize ([current-directory "/"])
  (with-output-to-string
      (λ ()
        (system* (find-executable-path "ls") "-l"))))