Module: MJ::Tools::SubProcess::ClassMethods
- Defined in:
- lib/mj/tools/subprocess.rb
Instance Method Summary collapse
-
#adjust_environment(wd = nil, env = nil, lang = "C") ⇒ Object
Helper method to adjust LANG to “C”.
-
#execute(command, wd = ENV["HOME"], env = nil) ⇒ Object
Executes command.
Instance Method Details
permalink #adjust_environment(wd = nil, env = nil, lang = "C") ⇒ Object
Helper method to adjust LANG to “C”
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/mj/tools/subprocess.rb', line 50 def adjust_environment( wd=nil, env=nil, lang="C" ) begin # Go to the working directory if given if wd cwd = Dir.getwd Dir.chdir(wd) if not $noop logger.debug( "Changed working directory from #{cwd} to #{wd}" ) end # Set the environment the user wants oldenv = Hash.new if env env.each do |var, value| oldenv[var] = ENV[var] if value.nil? or value == "" next if ENV.has_key?( value ) ENV[var] = nil logger.verbose "Removing #{var} from environment" else logger.verbose "#{var} = #{value}" ENV[var] = value end end end # Save old LANG setting and switch to 'C' oldlang = ENV['LANG'] ENV['LANG'] = lang yield # Reset the old LANG setting ENV['LANG'] = oldlang # Reset our changes to ENV oldenv.each do |var, value| ENV[var] = value end ensure # Reset the current working directory if wd logger.debug( "Changed working directory back to #{cwd}" ) Dir.chdir(cwd) if not $noop end end end |
permalink #execute(command, wd = ENV["HOME"], env = nil) ⇒ Object
Executes command
Executes the given command and yields each line of output. Returns $? .
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/mj/tools/subprocess.rb', line 15 def execute( command, wd = ENV["HOME"], env = nil ) logger.trace "(#{wd}) > #{command} 2>&1" if !$noop adjust_environment( wd, env ) { IO.popen( "#{command} 2>&1" ) { |f| begin while line = f.readline if block_given? yield line.chomp else logger.verbose line.chomp end end rescue EOFError # Expected. Do nothing end } if $?.coredump? or $?.signaled? raise CoreDumpError, "Command '#{command}' core dumped because of signal #{$?.termsig}!" end logger.trace "= #{$?.exitstatus}" return $?.exitstatus } else adjust_environment( wd, env ) { logger.trace "= 0 # noop" } return 0 end end |