2016-05-14 57 views
2

即时通讯尝试为我的系统编写一个脚本,从目录结构中填充静态html文件。产卵或从球拍系统

id更喜欢使用racket来完成任务,但我有diffaculty发现一些关键特性,最重要的是产生子处理的能力,比如C调用“system”。

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

+2

只要搜索的文档:http://docs.racket-lang.org/search/index.html ?q = system –

+0

thanka用于指向我的正确方向,“系统”对于搜索引擎来说是一个浑浊的术语,所以很多结果 –

+0

对于一般的搜索引擎,当然。但语言特定的文档可以足够缩小它们。 –

回答

3

实际上有两个函数的工作方式类似于C中的系统,它们是:systemsystem*。 (有产卵关子过程的其他方式,但是这两个是最简单的工作很相似,许多其他语言。

在这两个,system是最简便的一个,并在命令把你想作为一个运行。字符串这样,你可以做的事情,如:

(system "ls -l") 

虽然这是一个稍微复杂的使用,我喜欢system*好一点,因为它需要的参数作为一个列表,这意味着你可以更轻松与球拍一起玩。

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

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

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

把它放在一起,例如,我可以将运行ls -l的结果作为字符串使用以下代码保存。 (请注意,在球拍better ways to get the contents of your root directory,这仅仅是使用球拍的shell脚本的例子。)

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