从标准输入获取下一个字节或零 - Ruby

时间:2013-03-18 12:15:38

标签: ruby stream stdin

我想从ruby中的标准输入一次读取一个字节,但是,如果没有可用的新数据,我希望方法立即返回,所以each_byte等对我来说不是一个选项,只要我可以看到,因为它们会阻止程序执行。

理想情况下,这种方法可以让我做这样的事情:

byte = STDIN.next_byte_or_nil
if(byte)
#Process
else
#Do something else
end

我如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

如果读操作会阻塞,您可以使用read_nonblock抛出Errno::WOULDBLOCK异常。因此STDIN.read_nonblock(1) rescue nil将读取一个字节而不会阻塞或返回nil

由于您只使用nil值来检查呼叫是否成功,因此您实际上并不需要rescue nil

begin
  byte = STDIN.read_nonblock(1)
  #Process
rescue Errno::WOULDBLOCK
  #Do something else
end

答案 1 :(得分:0)

getc是您正在寻找的方法:

byte = STDIN.getc
if byte
  # Process
else
  # Do something else
end

答案 2 :(得分:0)

您可以尝试使用readbyte来实现目标。