运行 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
我有一个正在终端中测试的 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