2016-07-19 4 views
0

Ich habe ein Ruby-Skript, das ich im Terminal testen bin. Mit diesem Code, es nicht sofort zurück, sondern bleibt wach und druckt alle Antworten:Running Ruby-Skript im Terminal sollte "wach bleiben" und nicht zu beenden, sobald es an das Ende der Datei

client = TweetStream::Client.new(credentials) 
client.on_direct_message do |direct_message| 
    puts 'direct message: ' + direct_message.text 
end 

client.userstream 

Aber jetzt, um eine Reihe dieser Kunden auf einmal zu testen, muß ich sie in ihrem eigenen Thread setzen , wie folgt:

Thread.new do 
    client = TweetStream::Client.new(credentials) 

    client.on_direct_message do |direct_message| 
     puts 'direct message: ' + direct_message.text 
    end 
end 

Das Problem ist, dass das Ruby-Skript sofort zurückgibt. Wie kann ich es nicht sofort zurückkehren lassen und wach bleiben, bis ich cmd + c mache, um es zu schließen?

Antwort

3

Sie können Ruby-fragen zu warten, bis Faden durch die Verwendung #join

t = Thread.new do 
    client = TweetStream::Client.new(credentials) 

    client.on_direct_message do |direct_message| 
    puts 'direct message: ' + direct_message.text 
    end 
end 

t.join 
1

Sie Vielleicht geschieht Thread.stop hilft. Dies wird den Thread stoppen. Wenn Sie den Thread mit der Methode join aufrufen, wartet der Ruby, bis der Thread beendet ist. In diesem Fall wird gewartet, bis Sie den Prozess beenden.

t = Thread.new do 
    puts "Test" 
    sleep 1 
    puts "wait for kill" 
    Thread.stop 
end 

t.join 
Verwandte Themen