H
Hans Fugal
I want to pipe two system commands together from within ruby. cmd1 and
cmd2 are arrays, e.g.
cmd1 = ['oggdec','-o','-',oldpath]
cmd2 = ['lame','-',newpath]
I think I can do the following,
IO.popen('-','r') do |p1|
exec cmd1 unless p1
IO.popen('-','w') do |p2|
exec cmd2 unless p2
p2.write(p1.read)
end
end
but I don't like the line "p2.write(p1.read)", because I think it will
read into memory from p1 before turning around and writing it to p2.
This may work for the above example, but it's not very pipelike and I
worry that read might return early (I'm not sure what the semantics of
that are in Ruby, but in C I'd have to account for that).
Plus I don't like the popen '-'/exec combination. I'd love a more
elgant, efficient, and/or safer idiom if anyone can think of one.
cmd2 are arrays, e.g.
cmd1 = ['oggdec','-o','-',oldpath]
cmd2 = ['lame','-',newpath]
I think I can do the following,
IO.popen('-','r') do |p1|
exec cmd1 unless p1
IO.popen('-','w') do |p2|
exec cmd2 unless p2
p2.write(p1.read)
end
end
but I don't like the line "p2.write(p1.read)", because I think it will
read into memory from p1 before turning around and writing it to p2.
This may work for the above example, but it's not very pipelike and I
worry that read might return early (I'm not sure what the semantics of
that are in Ruby, but in C I'd have to account for that).
Plus I don't like the popen '-'/exec combination. I'd love a more
elgant, efficient, and/or safer idiom if anyone can think of one.