[plt-scheme] subprocess and wait

From: Paulo J. Matos (pocmatos at gmail.com)
Date: Mon Feb 27 10:33:06 EST 2006

On 27/02/06, Eli Barzilay <eli at barzilay.org> wrote:
> On Feb 27, Paulo J. Matos wrote:
> > On 26/02/06, Eli Barzilay <eli at barzilay.org> wrote:
> > > 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)))))
> > >
> >
> > Yes, didn't know about copy-port, thanks. Still, it's not working as
> > I expected, since thunk is reading data and returning when
> > eof-object?  is returned by (read-line). But this happens when no
> > data is there, but the process might still be running. So probably I
> > only stop parsing the output when the process stops and not when
> > eof-object? is found, right? Or is there a better way.
>
> Why?  Once you get an eof, there is nothing else that you can parse.

You're right, my conceptual mistake!

> If you want to avoid starting the next job while this one is still
> running, you can turn the body into (begin0 (thunk) (subprocess-wait p)).
>

Yes,... that was missing. Thanks!

>
> > On a more technical side of the code. Is there any special reason
> > why you used define-values and not let-values? Wouldn't it be
> > considered 'more correct' (whatever that means) to use let-values?
>
> No, no reason.
>

OK!

> --
>           ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:
>                   http://www.barzilay.org/                 Maze is Life!
>


--
Paulo Jorge Matos - pocm at sat inesc-id pt
Web: http://sat.inesc-id.pt/~pocm
Computer and Software Engineering
INESC-ID - SAT Group


Posted on the users mailing list.