如何在一定时间后从 Ruby 中的终端获取字符串?

How do I get a string from the terminal in Ruby after a certain amount of time?

我正在尝试创建一个命令行程序,要求用户输入,但仅在特定时间(例如:5 秒)后才获取字符串。

我目前正在使用 gets.chomp,但这需要 return。

有人知道什么有用的方法吗?

您可以使用标准库中的超时

require "timeout"
def gets_timeout( prompt, secs )
  puts
  print prompt + "timeout=#{secs}secs]: "
  Timeout::timeout( secs ) { gets }
rescue Timeout::Error
  puts "*timeout"
  nil  # return nil if timeout
end

和运行它

2.1.5 :010 > test = gets_timeout('hello',3)
hello[timeout=3secs]: *timeout
 => nil 
2.1.5 :011 > test
 => nil 
2.1.5 :012 > test = gets_timeout('hello',3)
hello[timeout=3secs]: test
 => "test\n" 
2.1.5 :013 > test
 => "test\n" 

我从 https://www.ruby-forum.com/topic/206770

@danmanstx 的回答帮助我构建了工作示例(我想它会在 Linux/MacOS 上工作):

require "timeout"
def gets_timeout( prompt, secs )
  puts
  s = ''
  print prompt + " [timeout=#{secs}secs]: "
  begin
    system("stty raw echo")
    Timeout::timeout( secs ) { loop { s += STDIN.getc } } 
  rescue Timeout::Error
    puts "*timeout"
  ensure
    system("stty -raw echo")
    puts
    puts "We got: [#{s}]"
  end 
end

gets_timeout('hello',3)

Matz 的额外学分。希望对你有帮助。