Class: Helper::AsyncCommand

Inherits:
Object
  • Object
show all
Defined in:
lib/helper.rb

Overview

外部コマンド実行中の待機ループの処理を書けるクラス

response = Helper::AsyncCommand.exec(“処理に時間がかかる外部コマンド”) do

print "*"

end if response.success?

puts "成功しました"

end

Class Method Summary collapse

Class Method Details

.exec(command, sleep_time = 0.5, &block) ⇒ Object



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/helper.rb', line 187

def self.exec(command, sleep_time = 0.5, &block)
  Thread.new {
    loop do
      block.call if block
      sleep(sleep_time)
    end
  }.tap { |th|
    if Helper::engine_jruby?
      # MEMO:
      #   Open3.capture3 - 全く動かない
      #   `` バッククウォート - 出力が文字化けする
      res = Open3.popen3(command) { |i, o, e|
        i.close
        `cd`   # create dummy Process::Status object to $?
        [o.read, e.read, $?]
      }
    else
      res = Open3.capture3(command)
    end
    th.kill
    return res
  }
end