如何在不读取IO的情况下知道IO是否为空?
我有一个IO
对象(比如$stdout
, $stderr
)。 我可以做read.empty?
在它上面看它是否为空,但是如果不读它就可以知道它是否为空? 我知道File
有size
,但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 /