从球拍产生或系统

时间:2016-05-14 17:10:31

标签: scheme posix racket

我试图为我的系统编写一个脚本,从目录结构中填充静态html文件。

id更喜欢使用racket来完成任务,但是让diffaculty找到一些关键功能,最重要的是产生子进程的能力,比如C调用“system”。

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

1 个答案:

答案 0 :(得分:3)

实际上有两个功能与C中的系统类似,它们是:systemsystem*。 (还有其他产生子进程的方法,但这两种方法最简单,与许多其他语言非常相似。

在这两个中,system更容易,并且接受您想要作为字符串运行的命令。这样你可以做以下事情:

(system "ls -l")

虽然使用它有点复杂,但我更喜欢system*,因为它将参数作为一个列表,这意味着你可以更容易地在Racket中使用它们。

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

现在,您可以执行诸如更改正在运行的命令的输入和输出端口之类的操作,甚至可以通过Racket的parameters更改当前工作目录。具体来说,您需要current-directorycurrent-input-portcurrent-output-port

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

总而言之,我可以使用以下代码将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"))))