如何在不读取IO的情况下知道IO是否为空?

我有一个IO对象(比如$stdout$stderr )。 我可以做read.empty? 在它上面看它是否为空,但是如果不读它就可以知道它是否为空? 我知道Filesize ,但IO没有。

编辑抱歉,如果我的问题不够明确。 我将这些对象作为Open3.popen3返回值。 我想看看是否有任何内容写入标准错误,例如。 如果可能的话,我想在不阅读的情况下这样做。

这是IO :: select方法的目的:

编辑问题后的更新示例:

 require 'open3' select_timeout = Rational(1,10) # optional Open3.popen3('ls /') do |stdin, stdout, stderr, w_thread| rdin, rdout, rderr = IO.select([stdin], [stdout], [stderr], select_timeout) if rdin p 'no data on standard input' unless rdin.member? stdin p 'no data on standard output' unless rdout.member? stdout p 'no data on standard error' unless rderr.member? stderr else p 'none of streams has data available' end retval = w_thread.value end # "no data on standard output" # "no data on standard error" 

而只有标准输入包含来自衍生线程命令ls /