我想一次从 ruby 的标准输入中读取一个字节,但是,如果没有可用的新数据,我希望该方法立即返回,所以 each_byte 等对我来说不是一个选项,就我可以看到,因为它们会阻止程序执行。
理想情况下,该方法允许我做这样的事情:
byte = STDIN.next_byte_or_nil
if(byte)
#Process
else
#Do something else
end
我该如何实现?
最佳答案
您可以使用 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
关于ruby - 从标准输入获取下一个字节或 nil - Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15476637/