diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-08-26 00:35:03 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-08-26 00:40:52 +0000 |
commit | 6d67d9c2af57233743187a92b7e651174d6eb42b (patch) | |
tree | 2c174e81b241de8d30786180e98e6d5f9979bd60 /lib/dtas/process.rb | |
parent | a1198562c51c5374a85d74e1cfe9e6a695384a3d (diff) | |
download | dtas-6d67d9c2af57233743187a92b7e651174d6eb42b.tar.gz |
I forgot :err is already handled by Process.spawn, so split out the functionality into err_str where we want to use it. Also, add a :no_raise flag which will allow us to better handle avprobe/soxi calls which can fail and avoid needless exceptions.
Diffstat (limited to 'lib/dtas/process.rb')
-rw-r--r-- | lib/dtas/process.rb | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/dtas/process.rb b/lib/dtas/process.rb index c19b5c5..2cf59c7 100644 --- a/lib/dtas/process.rb +++ b/lib/dtas/process.rb @@ -46,7 +46,8 @@ module DTAS::Process # :nodoc: r, w = IO.pipe opts = opts.merge(out: w) r.binmode - if err = opts[:err] + no_raise = opts.delete(:no_raise) + if err_str = opts.delete(:err_str) re, we = IO.pipe re.binmode opts[:err] = we @@ -57,16 +58,15 @@ module DTAS::Process # :nodoc: retry end w.close - if err + if err_str we.close res = "" - want = { r => res, re => err } + want = { r => res, re => err_str } begin readable = IO.select(want.keys) or next readable[0].each do |io| - bytes = io.nread begin - want[io] << io.read_nonblock(bytes > 0 ? bytes : 11) + want[io] << io.read_nonblock(2000) rescue Errno::EAGAIN # spurious wakeup, bytes may be zero rescue EOFError @@ -76,12 +76,14 @@ module DTAS::Process # :nodoc: end until want.empty? re.close else - res = r.read + res = r.read # read until EOF end r.close _, status = Process.waitpid2(pid) return res if status.success? - raise RuntimeError, "`#{Shellwords.join(cmd)}' failed: #{status.inspect}" + return status if no_raise + raise RuntimeError, + "`#{Shellwords.join(Array(cmd))}' failed: #{status.inspect}" end # XXX only for DTAS::Source::{Sox,Av}.try |