我试图为我的系统编写一个脚本,从目录结构中填充静态html文件。
id更喜欢使用racket来完成任务,但是让diffaculty找到一些关键功能,最重要的是产生子进程的能力,比如C调用“system”。
从球拍内部调用命令行和捕获输出的最简单方法是什么。
答案 0 :(得分:3)
实际上有两个功能与C中的系统类似,它们是:system
和system*
。 (还有其他产生子进程的方法,但这两种方法最简单,与许多其他语言非常相似。
在这两个中,system
更容易,并且接受您想要作为字符串运行的命令。这样你可以做以下事情:
(system "ls -l")
虽然使用它有点复杂,但我更喜欢system*
,因为它将参数作为一个列表,这意味着你可以更容易地在Racket中使用它们。
(system* (find-executable-path "ls") "-l")
现在,您可以执行诸如更改正在运行的命令的输入和输出端口之类的操作,甚至可以通过Racket的parameters更改当前工作目录。具体来说,您需要current-directory
,current-input-port
和current-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"))))