【发布时间】:2011-10-07 18:33:59
【问题描述】:
如何在 Clojure 中执行系统特定的命令并获得它们的响应?例如,假设我们在一台 Linux 机器上,我如何调用 top 或 free,并获取它们的结果以进行进一步处理?
【问题讨论】:
标签: clojure
如何在 Clojure 中执行系统特定的命令并获得它们的响应?例如,假设我们在一台 Linux 机器上,我如何调用 top 或 free,并获取它们的结果以进行进一步处理?
【问题讨论】:
标签: clojure
(use '[clojure.java.shell :only [sh]])
(sh "free")
(sh "top" "-bn1")
另请参阅:http://clojuredocs.org/clojure_core/clojure.java.shell/sh
【讨论】:
clojure.java.shell/sh 在 Linux 机器上运行良好,但在 Windows 机器上不行; Windows 有不同的外壳吗?
sh "cmd" "dir"
/C 选项,即(未经测试):sh "cmd" "/C" "dir"。这由(在 DOS 窗口中)help cmd 解释。
您应该可以按如下方式使用 Java Runtime.exec 方法:
(import 'java.lang.Runtime)
(. (Runtime/getRuntime) exec "your-command-line-here")
Runtime.exec 方法返回一个Process 对象,您可以根据需要查询该对象以获取标准输出等。
【讨论】:
(. (Runtime/getRuntime) exec (into-array ["command" "arg1" "arg2"]))
如果您愿意在抽象方面做得更高一些(尽管没有那么高),我会推荐Conch,因为我发现它可以编写非常可读的代码。
【讨论】:
您可以使用 babashka 库在 Clojure 中运行 shell 命令。一个例子是
#!/usr/bin/env bb
(require '[clojure.java.shell :refer [sh]])
(sh "top")
【讨论】: