def safesystem(*args)
if args.size == 1
args = [ default_shell, "-c", args[0] ]
end
program = args[0]
if !program_exists?(program)
raise ExecutableNotFound.new(program)
end
logger.debug("Running command", :args => args)
stdout_r, stdout_w = IO.pipe
stderr_r, stderr_w = IO.pipe
process = ChildProcess.build(*args)
process.io.stdout = stdout_w
process.io.stderr = stderr_w
process.start
stdout_w.close; stderr_w.close
logger.debug('Process is running', :pid => process.pid)
logger.pipe(stdout_r => :info, stderr_r => :info)
process.wait
success = (process.exit_code == 0)
if !success
raise ProcessFailed.new("#{program} failed (exit code #{process.exit_code})" \
". Full command was:#{args.inspect}")
end
return success
end