我尝试从sh命令获取输出但没有看到任何输出。
(sh "top")
命令top
- 无输出。我知道sh
命令就像是监听器。那么如何配置top
以获取tail -f
的输出。假设<TouchableHighlight onPress=this.login()> // yours action should go here
<Image />
</ TouchableHighlight>
应该是相同的行为。
谢谢,
答案 0 :(得分:3)
首先确保您在“批处理模式”下运行top
版本,只是无限制地打印到stdout ad。对于Linux和FreeBSD,这是top -b
。下一个sh
不能用于此问题,因为它等待命令完成。所以可以通过Java的ProcessBuilder
来完成同样的工作。 E.g。
(require '[clojure.java.io :as io])
; start `top -b`
(let [process (-> (ProcessBuilder. ["top" "-b"]) .start)]
; get the stdout of the process
(with-open [stdout (io/reader (.getInputStream process))]
(loop []
; read a line, handle it, until EOF
(when-let [line (.readLine stdout)]
(println line) ; work here
(recur)))))
(注意这缺少最后的(.destroy process)
电话)
(sh "top")
未返回的原因严格来说不是Clojure问题。您必须使用以下参数为top
启动top
:-n1
(仅一次迭代,然后停止)和-b
(批处理模式,只需写入stdout)。其他版本可能会有所不同。
user=> (use '[clojure.java.shell :only [sh]])
nil
user=> (sh "top" "-n1" "-b")
{:err "",
:exit 0,
:out "top - 14:06:47 up 126 days, 5:21, 5 users, load average: 0.93, 0.67, 1.12 ,,,
在您的示例中,您刚刚从命令行运行top
。所以它开始并运行等待你退出或杀死它 - 阻止你的REPL。