我的尝试:
(import 'java.lang.Runtime)
(. (Runtime/getRuntime) exec (into-array ["youtube-dl" "--no-playlist" "some youtube video link"]))我还试过sh。但这两种方法都没有达到我的要求--运行一个类似于shell的程序(sh等待直到程序退出,exec启动它,而不是等待它的退出;这两种方法都不会将任何东西输出到标准输出)。我希望实时显示进程输出,例如,当我运行youtube-dl时,我希望看到视频下载的进度。
如何在Clojure中完成这个简单的任务?
发布于 2017-08-26 13:21:03
您必须启动进程并侦听其输出流。一个解决办法是:
(: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))))https://stackoverflow.com/questions/45895485
复制相似问题