Hans Fugal <fugalh / zianet.com> wrote:

> matt neuburg wrote:
> > Hans Fugal <fugalh / zianet.com> wrote:
> > 
> >> 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 don't know about the arrays, but you can say IO.popen ("oggdec |
> > lame").... m.
> > 
> 
> Yeah, that won't work here (unless there's a reliable way to 
> shell-quote/escape oldpath and newpath).

I'm a little confused about oldPath. Once you have told IO.popen to
generate an IO instance (let's call it ios), whatever you write to ios
passes thru the process. So you don't actually need to tell IO.popen
about oldpath; you just write the data.

As for quoting, I just put quotes around it.

So, for example, a way to do LAME encoding with Ruby is like this:

oldpath = "/Users/mattneub/some sound file.aif"
newpath = "/Users/mattneub/some sound file.mp3"
s = "lame --preset standard - '#{newpath}'"
IO.popen(s, "r+") do |ios|
  ios.write(File.read(oldpath))
end

So maybe you could say:

s = "oggdec -R -o - - | lame ... - '#{newpath}'"

I've suggested -R because the oggdec man page warns not to write WAV to
stdout. But then I've omitted some lame params (...) because you'll
probably need to tell lame what kind of raw data it's receiving. I
haven't tried this, though.

m.

-- 
matt neuburg, phd = matt / tidbits.com, http://www.tidbits.com/matt/
Tiger - http://www.takecontrolbooks.com/tiger-customizing.html
AppleScript - http://www.amazon.com/gp/product/0596102119
Read TidBITS! It's free and smart. http://www.tidbits.com