我有一个IO
对象(如$stdout
, $stderr
)。我可以read.empty?
看看它是否为空,但是不读它是否可以知道它是否为空呢?我知道File
has size
, but IO
才不是。
Edit抱歉,如果我的问题不够清楚。我将这些对象作为返回值Open3.popen3
。例如,我想看看是否有任何内容写入了标准错误。如果可能的话,我想在不阅读它的情况下完成它。
这是一个目的IO::选择 method:
问题编辑后更新的示例:
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 /
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)