lib/qu/cmdwrapper/cmd.rb in qu-cmdwrapper-1.0.5 vs lib/qu/cmdwrapper/cmd.rb in qu-cmdwrapper-1.0.7

- old
+ new

@@ -1,8 +1,9 @@ #!/usr/bin/env ruby -require 'open3' +require "open3" + require 'tempfile' require 'qu/utils' module Qu module Cmdwrapper @@ -12,34 +13,39 @@ THERMO_PATH = File.join(__dir__, 'primer3_config') + '/' module_function - def primer3_core(p3_input_file) - begin - cmd = File.join(BIN_PATH, 'primer3_core') - begin - return system_quietly("#{cmd} #{File.realpath(p3_input_file)}") - rescue ShellError - return '' - end - rescue IOError - $stderr.puts "Primer3 input file not exists: #{p3_input_file}" + def primer3_core(paras) + cmd = File.join(BIN_PATH, 'primer3_core') + + lines = [] + paras.each_pair do |key, value| + next if value.to_s.empty? + lines << "#{key}=#{value}" + end + lines << "=" + + stdout, stderr, status = Open3.capture3(cmd, stdin_data: lines.join("\n")) + if status.success? + return stdout + else + $stderr.puts stderr exit end end def ntthal(s1:, s2: nil, mv: 50, dv: 1.5, d: 50, n: 0.25, mode: 'ANY', tm_only: false) cmd = File.join(BIN_PATH, 'ntthal') if s2 # tm = `#{cmd} -mv #{mv} -dv #{dv} -d #{d} -n #{n} -s1 #{s1} -s2 #{s2} -r -path #{THERMO_PATH} -a #{mode}` # out = `#{cmd} -mv #{mv} -dv #{dv} -d #{d} -n #{n} -s1 #{s1} -s2 #{s2} -path #{THERMO_PATH} -a #{mode}` - out = system_quietly("#{cmd} -mv #{mv} -dv #{dv} -d #{d} -n #{n} -s1 #{s1} -s2 #{s2} -path #{THERMO_PATH} -a #{mode}") + out = exec_cmd("#{cmd} -mv #{mv} -dv #{dv} -d #{d} -n #{n} -s1 #{s1} -s2 #{s2} -path #{THERMO_PATH} -a #{mode}") else # out = `#{cmd} -mv #{mv} -dv #{dv} -d #{d} -n #{n} -s1 #{s1} -path #{THERMO_PATH} -a HAIRPIN` - out = system_quietly("#{cmd} -mv #{mv} -dv #{dv} -d #{d} -n #{n} -s1 #{s1} -path #{THERMO_PATH} -a HAIRPIN") + out = exec_cmd("#{cmd} -mv #{mv} -dv #{dv} -d #{d} -n #{n} -s1 #{s1} -path #{THERMO_PATH} -a HAIRPIN") end begin lines = out.lines @@ -137,12 +143,20 @@ fh.unlink end return amp_seq_list end - class ShellError < StandardError; end + def exec_cmd(cmd) + stdout, stderr, status = Open3.capture3(cmd) + if status.success? + return stdout + else + puts stderr + exit + end + end - def system_quietly(*cmd) + def system_quietly_old(*cmd) exit_status=nil err=nil out=nil Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thread| err = stderr.gets(nil)