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

标签 ruby stream stdin

我想一次从 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/

相关文章:

ruby - 在 Ruby Mechanize 的 POST 请求中为同一个键提交多个值

ruby-on-rails - 使用 postgresql 和 ruby​​ on rails 编写带有日期范围的 SQL 查询

c++ - ostream showbase 不显示零值的 "0x"

loops - 如何迭代 stdin 两次?

plot - 如何从 stdin 读取数据到 gnuplot 并绘制相同的数据两次

作为一流函数的 Ruby 匿名类

ruby-on-rails - Rails 事务不是原子的吗?

Java 8 流和并发写入

java - FindBugs: "may fail to close stream"- 这对 InputStream 有效吗?

Java stdin 不提示程序运行