我的尝试:
(import 'java.lang.Runtime)
(. (Runtime/getRuntime) exec (into-array ["youtube-dl" "--no-playlist" "some youtube video link"]))
我也试过sh
。但是这两种方法都没有做我想做的事情 - 像shell一样运行程序(sh
等待程序退出,exec
启动它并且不等待退出;两者都不输出任何标准输出)。我想要实时显示过程输出,例如当我运行youtube-dl
时,我希望看到视频下载的进展。
如何在Clojure中完成这个简单的简单任务?
答案 0 :(得分:2)
您必须启动该进程并侦听其输出流。一个解决方案是:
(:require [clojure.java.shell :as sh]
[clojure.java.io :as io])
(let [cmd ["yes" "1"]
proc (.exec (Runtime/getRuntime) (into-array cmd))]
(with-open [rdr (io/reader (.getInputStream proc))]
(doseq [line (line-seq rdr)]
(println line))))