-let do_shlines script =
- let dir, cmd = create_script script in
- let chan = open_process_in cmd in
- let lines = ref [] in
- let rec loop () =
- let line = input_line chan in
- lines := line :: !lines;
- loop ()
- in
- (try loop () with End_of_file -> ());
- let r = close_process_in chan in
- rm_rf dir;
- match r with
- | WEXITED 0 -> List.rev !lines
- | WEXITED i ->
- let msg = sprintf "external command failed with code %d" i in
- goal_failed msg
- | WSIGNALED i ->
- let msg = sprintf "external command was killed by signal %d" i in
- goal_failed msg
- | WSTOPPED i ->
- let msg = sprintf "external command was stopped by signal %d" i in
- goal_failed msg
-let shlines fs = ksprintf do_shlines fs
+let do_shlines ?tmpdir script =
+ with_script ?tmpdir script (
+ fun cmd ->
+ let chan = open_process_in cmd in
+ let lines = ref [] in
+ let rec loop () =
+ let line = input_line chan in
+ eprintf "%s\n%!" line;
+ lines := line :: !lines;
+ loop ()
+ in
+ (try loop () with End_of_file -> ());
+ match close_process_in chan with
+ | WEXITED 0 -> List.rev !lines
+ | WEXITED i ->
+ let msg = sprintf "external command failed with code %d" i in
+ goal_failed msg
+ | WSIGNALED i ->
+ let msg = sprintf "external command was killed by signal %d" i in
+ goal_failed msg
+ | WSTOPPED i ->
+ let msg = sprintf "external command was stopped by signal %d" i in
+ goal_failed msg
+ )
+let shlines ?tmpdir fs = ksprintf (do_shlines ?tmpdir) fs