P
Pito Salas
This is slightly subtle question about how a process that reads from a
pipe that is being written to by another process may run asynchronously.
Here's a code snippet:
def start_processing
open("|-", "r") do |worker|
if worker
# here we are in the parent
i = 0
worker.each_line do |line|
puts "line #{i}
i = i+1
end
else
# here we are in child thread
exec("./iacommand.rb")
end
end
end
iacommand.rb is invoked as a process within ruby. It does a lot of
processing, outputs a line, does a more processing, outputs another
line, and so on.
I would like to have the "puts" calls occur right when the a line is
generated by the script running in the process.
The way it is written above, what happens is that the app waits until
iacommand.rb exits and then calls the series of puts in immediate
succession.
So in other words, how do I asynchronously read from a pipe that is
being fed by a process?
pipe that is being written to by another process may run asynchronously.
Here's a code snippet:
def start_processing
open("|-", "r") do |worker|
if worker
# here we are in the parent
i = 0
worker.each_line do |line|
puts "line #{i}
i = i+1
end
else
# here we are in child thread
exec("./iacommand.rb")
end
end
end
iacommand.rb is invoked as a process within ruby. It does a lot of
processing, outputs a line, does a more processing, outputs another
line, and so on.
I would like to have the "puts" calls occur right when the a line is
generated by the script running in the process.
The way it is written above, what happens is that the app waits until
iacommand.rb exits and then calls the series of puts in immediate
succession.
So in other words, how do I asynchronously read from a pipe that is
being fed by a process?