我有IO
个对象(例如$stdout
,$stderr
)。我可以在它上面read.empty?
查看它是否为空,但是如果不读它就可以知道它是否为空?我知道File
有size
,但IO
没有。{/ p>
修改
对不起,如果我的问题不够明确。我将这些对象作为Open3.popen3
的返回值。我想看看是否有任何内容写入标准错误,例如。如果可能的话,我想在不阅读的情况下这样做。
答案 0 :(得分:2)
这是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 /