Hi ROROers,

I'm trying to build something on top the ChildProcess gem that makes
it as easy in Ruby to pipe stuff between processes (and Ruby blocks),
as it is in the shell.

It's basically working. To see it in action:
clone https://gist.github.com/4600139 pipes-gist && cd pipes-gist
gem install childprocess
ruby ./pipes.rb

But, I wonder if someone can explain pipes to me a bit more...

Calling IO.pipe creates a read and a write end:
r, w = IO.pipe

I'm reading from the read end like this:
r.each_line { |line| puts "this came out of the pipe: #{line}" }

When I'm done I close the write end:
w.close

And I would expect that to send an EOF through the pipe, which
#each_line would see and cause it to stop (or yield the last partial
line).

But it doesn't. #each_line never finishes. It keeps going until the
read end of the pipe is closed, and when that happens it raises an
IOError (... stream closed).

Is there no more graceful way to close a pipe?

Cheers,
Chris

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
or Rails Oceania" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rails-oceania?hl=en.

Reply via email to