使用带超时的多线程时,ruby Open3.capture3中的封闭流(IOError)
我希望运行几个系统命令,并获得以下结果:使用带超时的多线程时,ruby Open3.capture3中的封闭流(IOError),ruby,timeout,popen,popen3,Ruby,Timeout,Popen,Popen3,我希望运行几个系统命令,并获得以下结果: 我希望在同一进程的不同线程中运行每个命令 我希望捕获并存储输出和退出状态 我希望在执行时间上设置超时,以确定某个系统命令是否被卡住 不幸的是,以下代码的结尾是: /usr/lib/ruby/1.9.1/open3.rb:276:inread”:封闭流(IOError) from/usr/lib/ruby/1.9.1/open3.rb:276:in capture3' 有时,取决于线程调度。 例如,当将超时更改为2秒(或完全删除超时块)时,代码可以工作 下
read”:封闭流(IOError)
from/usr/lib/ruby/1.9.1/open3.rb:276:in
capture3'
有时,取决于线程调度。
例如,当将超时更改为2秒(或完全删除超时块)时,代码可以工作
下面是一个示例代码:
require 'open3'
require 'timeout'
def output_from(command)
o, e, s = Open3.capture3(command)
return o
end
attempts = 0
Thread.abort_on_exception = true
for i in 0..5
Thread.new {
begin
Timeout::timeout(0.0001) {
output = output_from('cat /proc/cpuinfo')
}
rescue Timeout::Error => e
attempts+=1
retry unless attempts > 2
end
}
end
puts attempts
我曾试图从
方法的output\u中营救
,并关闭o,但也没有效果。
我感觉线程以某种方式共享popen3实现中的管道或某些变量