代码之家  ›  专栏  ›  技术社区  ›  Zack

gets内的Ruby超时

  •  -2
  • Zack  · 技术社区  · 6 年前

    我正在打印 "Please input a value" 并提出 Timeout::Error 如果在2秒内未收到输入。

    我想我可以做到:

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

    当我运行脚本时,它会打印消息,然后就坐在那里。如果我在10秒后输入一个值(例如),那么它将超时。直到我输入一个值之后,它才到达超时。

    1 回复  |  直到 6 年前
        1
  •  0
  •   mechnicov    6 年前

    据我所知,你只想 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
    

    STDIN.gets . 你可以看看这个 here