[plt-scheme] subprocess and wait
On Feb 26, Paulo J. Matos wrote:
> On 26/02/06, Eli Barzilay <eli at barzilay.org> wrote:
> >
> > A side-comment: running a subprocess that generates lots of
> > outputs and collecting all that text in the scheme process might
> > not be a good idea since you're making that other process compete
> > with scheme for memory. My guess is that switching things so you
> > process the subprocess output in a thread is going to be just a
> > little bit more complex.
>
> I guess you're right, but what would then be your suggestion? Doing
> the parsing of the output of the process during its execution?
Yes. Something like this:
(require (lib "port.ss"))
(define (with-input-from-subprocess exe thunk)
(define-values (in out) (make-pipe))
(define-values (p pout pin perr)
(subprocess #f (open-input-file "/dev/null") (current-error-port) exe))
(thread (lambda ()
(copy-port pout out)
(close-output-port out)
(subprocess-wait p)))
(parameterize ([current-input-port in]) (thunk)))
(require (lib "string.ss"))
(printf ">> ~s\n"
(with-input-from-subprocess "/bin/pwd"
(lambda () (regexp-split #rx"/" (read-line)))))
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://www.barzilay.org/ Maze is Life!