From 4f161c44e3368b4bf2101eed0640d8ed950ac2a4 Mon Sep 17 00:00:00 2001 From: Steven Miers Date: Sun, 14 Dec 2014 21:40:03 -0600 Subject: [PATCH] VRFS-2481 : Better implementation of external script. Getting proper stdout and stderr, as well as a clean implicit shutdown. --- ruby/lib/jam_ruby/jam_tracks_manager.rb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/ruby/lib/jam_ruby/jam_tracks_manager.rb b/ruby/lib/jam_ruby/jam_tracks_manager.rb index 4bd6c7c78..38a4c5eab 100644 --- a/ruby/lib/jam_ruby/jam_tracks_manager.rb +++ b/ruby/lib/jam_ruby/jam_tracks_manager.rb @@ -1,5 +1,6 @@ require 'json' require 'tempfile' +require 'open3' module JamRuby @@ -19,10 +20,15 @@ module JamRuby output_jkz="" title="" - output = `python #{py_root}/jkcreate.py -D -k #{sku} -c art.png -p #{public_key} -s #{private_key} -I #{tracks_filename} -o #{output_jkz} -t '#{title}'` - puts "#{output} :: #{!!output.index(/Error/i)}" - raise ArgumentError, "Error calling python script: #{output}" if !!output.index(/Error.*:/i) - + # From http://stackoverflow.com/questions/690151/getting-output-of-system-calls-in-ruby/5970819#5970819: + #Open3.popen3("ls") do |stdin, stdout, stderr, wait_thr| + Open3.popen3("python", "#{py_root}/jkcreate.py -D -k #{sku} -c art.png -p #{public_key} -s #{private_key} -I #{tracks_filename} -o #{output_jkz} -t '#{title}'") do |stdin, stdout, stderr, wait_thr| + pid = wait_thr.pid + exit_status = wait_thr.value + err = stderr.read(1000) + raise ArgumentError, "Error calling python script: #{err}" if err.present? + end + tmp_dir end end