X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/dfd19067c2b670d13415a04291caaa51b025d3d6..984a831b49726c8ac1b517631b4bb4d071d1bb6a:/src/slave.sml diff --git a/src/slave.sml b/src/slave.sml index 7e3f9d8..299c0ed 100644 --- a/src/slave.sml +++ b/src/slave.sml @@ -36,7 +36,7 @@ type file_status = {action : file_action, val fileHandler = ref (fn _ : file_status => ()) val preHandler = ref (fn () => ()) val postHandler = ref (fn () => ()) - + fun registerFileHandler handler = let val old = !fileHandler @@ -96,6 +96,29 @@ fun run (program, argv) = OS.Process.isSuccess (Unix.reap proc) end + +fun runOutput (program, argv) = + let + val proc = Unix.execute (program, argv) + val inf = Unix.textInstreamOf proc + + fun loop out = + case TextIO.inputLine inf of + NONE => if (List.length out) > 0 then + SOME (String.concat (rev out)) + else + NONE + | SOME line => loop (line :: out) + + val lines = loop [] + in + case lines of + SOME lines => print lines + | NONE => (); + + (OS.Process.isSuccess (Unix.reap proc), lines) + end + fun shellOutput ss = let val proc = Unix.execute ("/bin/bash", ["-c", String.concat ss ^ " 2>&1"])