Re: IO.write problem on "raw" Windows


#1

On Windows, when running “normal” ruby from a command prompt (Windows’
cmd.exe), it blocks on write.

The “other”
program itself is working fine - it’s a simple echo-clone.

I expect the other program is blocking, because you’re not reading its
output. That is, you have:

ruby -------|pipe1|--------> other
<------|pipe2| --------

Ruby is stuffing data into pipe1, but not reading pipe2. Other program
reads
from pipe1, and stuffs data into pipe2. The O/S will provide some
buffering,
but eventually the other program will block as it can’t write any more
to
pipe2.

Simple solution is to have a separate Ruby thread for reading pipe2:
(Note,
not tested under Windows)

prg = “/bin/cat”

pipe = IO.popen(prg, “r+b”)
t = Thread.new do
while line = pipe.gets # or pipe.read(1024)
puts “<< #{line}” # optional
end
pipe.close_read
end

File.open(ARGV[0], “rb”) do |file|
pipe.write file.read
end

pipe.close_write
t.join