2016-07-19 12 views
0

У меня есть скрипт Ruby, который я тестирую в терминале. С помощью этого кода, он не сразу вернулся, но бодрствует и печатает любые ответы:Запуск скрипта Ruby в терминале должен «оставаться бодрствующим» и не заканчиваться после того, как он доходит до конца файла.

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

client.userstream 

Но теперь, чтобы проверить некоторые из этих клиентов сразу, мне нужно поставить их в отдельном потоке , так:

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

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

Проблема в том, что скрипт Ruby немедленно возвращается. Как я могу заставить его не сразу возвращаться и бодрствовать, пока я не сделаю cmd + c, чтобы закрыть его?

ответ

3

Вы можете попросить Руби ждать, пока поток не будет сделано с помощью #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

Может быть Thread.stop помогает. Это остановит поток. Если вы вызываете поток с помощью метода join, рубин ждет, пока не закончит нить. В этом случае подождите, пока вы не убьете процесс.

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

t.join