Hi Chris, > This works exactly as you would expect from its POSIX equivalents and > has the advantage that you can read from the pipe as the sub-process is > proceeding rather than just collect at the end.
Thank you ! Following your suggestion, I ended-up with : --8<---------------cut here---------------start------------->8--- (let* ((err-pipe (pipe)) (out-pipe (pipe)) (read-out (car out-pipe)) (write-out (cdr out-pipe)) (read-err (car err-pipe)) (write-err (cdr err-pipe)) (pid (run-concurrently+ (apply tail-call-program "...") (write-out 1) (write-err 2))) (ret (status:exit-val (cdr (waitpid pid))))) (close-port write-out) (close-port write-err) (let ((output (read-string read-out)) (error (read-string read-err))) (close-port read-out) (close-port read-err) (case ret ((0) output) (else (raise ...))))) --8<---------------cut here---------------end--------------->8--- which seems to work. However, run-concurrently+ uses "primitive-fork" which is forbiden in a multi-thread context (sadly, mine). Do you have any idea on how to overcome this ? Thanks, Mathieu