2010-04-12 15 views
2

如果我運行一個像這樣的命令,使用ruby的pty類,如果我找到一個特定的輸入字符串,該如何處理它?你如何殺死Ruby中的PTY.spawn調用?

cmd = "appcfg.py update cdn" 
PTY.spawn("#{cmd} 2>&1") do | input, output, pid | 
    begin 
    input.expect("Email:") do 
     output.write("#{credentials[:username]}\n") 
    end 
    input.expect("Password:") do 
     output.write("#{credentials[:password]}\n") 
    end 
    if input.gets == "SOMETHING" 
     EXIT! 
    end 
    rescue Exception => e 
    puts "GAE Error..." 
    end 
end 

什麼是正確的方法來做到這一點?

回答

1

這樣的事情呢?

processes = %x[ps -A].split("\n") 
processes.each do |p| 
    if p.include?('ruby1.9') 
    pid = p.split(' ') 
    %x[kill #{pid[0].to_i}] 
    end 
end 

這是ofcourse如果您運行ruby1.9(它會殺死所有ruby1.9過程!(所以如果你正在運行的服務器或東西上一些其他的紅寶石前衛,你將有if語句做一些檢查它是哪個過程