forked from clj-commons/etaoin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
proc.clj
41 lines (32 loc) · 981 Bytes
/
proc.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
(ns etaoin.proc
(:require [clojure.java.io :as io])
(:import java.lang.Runtime
java.lang.IllegalThreadStateException
java.io.IOException))
(defn java-params ^"[Ljava.lang.String;" [params]
(->> params
(map str)
(into-array String)))
(defn run [args]
(let [pb (java.lang.ProcessBuilder. (java-params args))]
(.redirectOutput pb (java.io.File/createTempFile "driver.out" ".log"))
(.redirectError pb (java.io.File/createTempFile "driver.err" ".log"))
(.start pb)))
;; todo store those streams
(defn alive? [^Process proc]
(.isAlive proc))
(defn exit-code [^Process proc]
(try
(.exitValue proc)
(catch IllegalThreadStateException _)))
(defn kill [^Process proc]
(.destroy proc))
;; todo refactor those
(defn read-out [^Process proc]
(try
(-> proc .getInputStream slurp)
(catch IOException _)))
(defn read-err [^Process proc]
(try
(-> proc .getErrorStream slurp)
(catch IOException _)))