2012-01-04 16 views
6

Bir alt işlemin çıktısını RubyRuby'de alt işlemin akış çıkışı

örn.

p `ping google.com` 

Hemen ping yanıtlarını görmek istiyorum; İşlemin tamamlanmasını beklemek istemiyorum.

+2

Neden downvote? Bu geçerli, geçerli bir soruya benziyor. – coreyward

cevap

5

Sen IO#popen kullanmalıdır:

IO.popen('ping google.com') do |io| 
    io.each { |s| print s } 
end 

: Cheers

IO.popen("ping -c 3 google.com") do |data| 
    while line = data.gets 
    puts line 
    end 
end 
9

yerine komutu ters tırnak kullanarak aşağıdaki yapabilirsiniz!

+1

Dylan Markow, görünüşe göre yumruk atıyordu, ama sonuçların üzerinde yinelemenin alternatif yöntemini göstermek için bunu bırakacağım ('' '' '' '' '' '' '' '' '). – coreyward

+2

"STDERR" i de yakalamak istiyorsanız popen3''ü unutmayın. Popen3'ten bahsetmek için – tadman

+0

thnx @tadman! – Zippie

3

hem stdout ve yakalamak isterseniz stderr sen popen2e kullanabilirsiniz:

require 'open3' 

Open3.popen2e('do something') do |_stdin, stdout_err, _wait_thr| 
    stdout_err.each { |line| puts line } 
end