如何执行系统命令?

sja*_*jac 51 clojure

如何在Clojure中执行特定于系统的命令并获得响应?例如,假设我们在Linux机器上,我如何调用topfree获取结果以进行进一步处理?

ove*_*ink 73

(use '[clojure.java.shell :only [sh]])
(sh "free")
(sh "top" "-bn1")
Run Code Online (Sandbox Code Playgroud)

另见:http://clojuredocs.org/clojure_core/clojure.java.shell/sh

  • @sjac:要让命令处理器为你执行命令,你需要使用`/ C`选项,即(未经测试):`sh"cmd""/ C""dir"`.这可以通过(在DOS窗口中)`help cmd`来解释. (3认同)
  • @PrayagUpd这听起来像是一个不同的问题.您应该单独询问,并详细说明. (3认同)
  • 我没有看到Windows的任何问题,(sh"calc")在我的系统上正常工作.和(sh"notepad""C:/windows/WindowsUpdate.log")一样.这个解决方案在您的系统上有什么问题? (2认同)

mik*_*era 13

您应该能够使用Java Runtime.exec方法,如下所示:

(import 'java.lang.Runtime)

(. (Runtime/getRuntime) exec "your-command-line-here")
Run Code Online (Sandbox Code Playgroud)

Runtime.exec方法返回一个Process对象,您可以根据需要查询该对象以获取标准输出等.

  • 如果命令具有参数,不要忘记使用字符串数组:((。(Runtime / getRuntime)exec(into-array [“ command”“ arg1”“ arg2”]))) (3认同)