4

Clojure でキャプチャして処理したい出力を長時間実行している Unix プロセスがあります。そのようなプロセスの 1 つの良い例は、repl-y / nREPL セッションです。その期間は無期限であり、出力は stdout に出力されます。

試してみると(clojure.java.io/sh "lein" "repl")、基になるプロセスが終了するまで評価がブロックされ、その後、出力を観察できます。

これは私が望んでいるものではありません。代わりに、すぐにストリームを取得したいのです。

clojure.java.io または同様の既存の Clojure ツールを使用してこれを実現できますか? それ以外の場合は、Java に頼っても構いません。

4

2 に答える 2

3

me.raynes.conchライブラリーを見てみましょう。これは、clojure.java.shellよりも少し汎用性があります。低レベルのAPIが探しているもののようです。

于 2013-06-04T13:43:45.267 に答える
2

詳細な回答ではありませんが、Clojure の関数のソースはかなり短いものです。shを削除するために少し作り直した場合.waitFor(または、到着時に返された部分読み取りを消費する高次関数を追加した場合InputStreamReader)、プロセスによって返されたときに更新されたデータを取得できる可能性があります。ただし、サブプロセスが入力も必要とする場合は、デッドロックに注意してください (lein repl例のように)。

于 2013-03-30T13:52:40.987 に答える