Ruby超时获取

时间:2018-12-16 22:48:29

标签: ruby timeout

如果2秒钟内未收到输入,我将尝试打印"Please input a value"并提高Timeout::Error

我认为我可以做到:

puts "Please input a value"
Timeout.timeout(2) do
  ans = gets
end
raise "aborted" unless ans == 'y'

当我运行脚本时,它将打印消息,然后就座。如果我在10秒后输入一个值(例如),则该值超时。在输入值之前,它不会超时。

1 个答案:

答案 0 :(得分:0)

据我了解,您只想要y的答案,并希望给出2秒的答案。

您可以使用begin..rescue..end的构造并循环until来获得y的答案

require 'timeout'

puts 'Input something'

begin
  status = Timeout::timeout(2) { answer = gets.chomp.downcase until answer == 'y' }
rescue Timeout::Error
  puts 'Time is out'
end

但是在Windows中,最好使用STDIN.gets。您可以阅读有关此here

的信息