运行 Ruby 终端中的脚本应该 'stay awake' 并且一旦到达文件末尾就不会终止

Running Ruby script in Terminal should 'stay awake' and not terminate once it gets to the end of the file

我有一个正在终端中测试的 Ruby 脚本。使用此代码,它不会立即 return,而是保持清醒并打印任何响应:

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 脚本 return 立即生效。我怎样才能让它不立即 return,并在我执行 cmd+c 关闭它之前保持清醒?

您可以使用 #join

要求 Ruby 等待线程完成
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

也许Thread.stop对您有帮助。这将停止线程。 如果您使用 join 方法调用线程,则 ruby 会等待线程结束。在这种情况下,将等到您终止进程。

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

t.join