首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在clojure中使用(sh "top")时没有输出?

在Clojure中使用(sh "top")时没有输出的原因可能是由于sh函数是Clojure的一个shell命令执行函数,它会启动一个子进程来执行指定的shell命令,并返回该子进程的输出结果。然而,当执行top命令时,它通常会以交互式的方式显示系统的进程信息,而不是将结果直接输出到标准输出流。

在Clojure中,当使用(sh "top")执行top命令时,由于没有提供一个有效的交互式终端,top命令无法正常工作并输出结果。这是因为top命令需要一个终端来显示结果,并且与用户进行交互。

要解决这个问题,可以尝试使用其他方法来执行top命令并获取输出结果。一种常见的方法是使用Java的ProcessBuilder类来创建一个子进程,并通过重定向输入输出流来执行命令并获取输出结果。以下是一个示例代码:

代码语言:clojure
复制
(require '[clojure.java.shell :as shell])

(defn execute-command [command]
  (let [process (.start (ProcessBuilder. (into-array String command)))]
    (-> process
        .getInputStream
        java.io.InputStreamReader.
        java.io.BufferedReader.
        .lines
        (reduce str))))

(println (execute-command ["top"]))

上述代码中,execute-command函数使用ProcessBuilder创建一个子进程,并通过重定向输入输出流来执行指定的命令。然后,通过逐行读取子进程的输出流,并将其连接成一个字符串,最后将结果打印出来。

需要注意的是,上述代码只是一个示例,实际使用时可能需要根据具体情况进行适当的修改和调整。

关于Clojure中执行shell命令的更多信息,可以参考Clojure官方文档中的相关内容:clojure.java.shell

请注意,以上答案仅供参考,具体解决方法可能因环境和需求而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

共17个视频
动力节点-JDK动态代理(AOP)使用及实现原理分析
动力节点Java培训
动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理。 动态代理可以在不改变原来目标方法功能的前提下, 可以在代理中增强自己的功能代码。
领券