从球拍产生或系统
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-directory
、current-input-port
和 current-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"))))
我正在尝试为我的系统编写脚本,以从目录结构填充静态 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-directory
、current-input-port
和 current-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"))))