| Class | Shell::SystemCommand |
| In: |
shell/system-command.rb
|
| Parent: | Filter |
| command | -> | name |
| each | -> | super_each |
| command | [R] |
# File shell/system-command.rb, line 17 def initialize(sh, command, *opts) if t = opts.find{|opt| !opt.kind_of?(String) && opt.class} Shell.Fail Error::TypeError, t.class, "String" end super(sh) @command = command @opts = opts @input_queue = Queue.new @pid = nil sh.process_controller.add_schedule(self) end
# File shell/system-command.rb, line 144 def each(rs = nil) while (l = @input_queue.pop) != :EOF yield l end end
# File shell/system-command.rb, line 60 def flush @pipe_out.flush if @pipe_out and !@pipe_out.closed? end
ex)
if you wish to output:
"shell: job(#{@command}:#{@pid}) close pipe-out."
then
mes: "job(%id) close pipe-out."
yorn: Boolean(@shell.debug? or @shell.verbose?)
# File shell/system-command.rb, line 156 def notify(*opts, &block) Thread.exclusive do @shell.notify(*opts) {|mes| yield mes if iterator? mes.gsub!("%id", "#{@command}:##{@pid}") mes.gsub!("%name", "#{@command}") mes.gsub!("%pid", "#{@pid}") } end end
# File shell/system-command.rb, line 49 def start @pid, @pipe_in, @pipe_out = @shell.process_controller.sfork(self) { Dir.chdir @shell.pwd exec(@command, *@opts) } if @input start_export end start_import end
# File shell/system-command.rb, line 116 def start_export notify "job(%id) start exp-pipe.", @shell.debug? _eop = true th = Thread.start{ Thread.critical = true begin Thread.critical = false @input.each{|l| @pipe_out.print l} _eop = false rescue Errno::EPIPE _eop = false ensure if _eop notify("shell: warn: Process finishing...", "wait for Job(%id) to finish pipe exporting.", "You can use Shell#transact or Shell#check_point for more safe execution.") # Tracer.on redo end Thread.exclusive do notify "job(%id) close exp-pipe.", @shell.debug? @pipe_out.close end end } end
# File shell/system-command.rb, line 82 def start_import # Thread.critical = true notify "Job(%id) start imp-pipe.", @shell.debug? rs = @shell.record_separator unless rs _eop = true # Thread.critical = false th = Thread.start { Thread.critical = true begin Thread.critical = false while l = @pipe_in.gets @input_queue.push l end _eop = false rescue Errno::EPIPE _eop = false ensure if _eop notify("warn: Process finishing...", "wait for Job[%id] to finish pipe importing.", "You can use Shell#transact or Shell#check_point for more safe execution.") # Tracer.on Thread.current.run redo end Thread.exclusive do notify "job(%id}) close imp-pipe.", @shell.debug? @input_queue.push :EOF @pipe_in.close end end } end
ruby-doc.org is a community service provided by Happy Camper Studios, a Phoenix, Arizona, Ruby application development company.
Documentation content on ruby-doc.org is provided by remarkable members of the Ruby community.
For more information on the Ruby programming language, visit ruby-lang.org.
Want to help improve Ruby's API docs? See Ruby Documentation Guidelines.