以下代码
require 'timeout'
begin
timeout(20) do # Line 4
result = `hostname`
end # Line 6
rescue Timeout::Error
puts "Timeout"
exit
end
puts "Result:" + result # Line 12
抛出错误
issue.rb:12:在
<main>': undefined local variable or method
结果'中 main:Object(NameError)
但如果我注释掉超时元素(第4行和第6行),它可以正常工作。我尝试过使用IO.popen,IO.select等,但这没有任何帮助。我已经在许多其他领域使用了这种超时技术,并且工作正常。
它似乎与超时值无关,因为我已经尝试了更大更小的值。
在Windows XP上使用Ruby 1.92。任何帮助非常感谢。
P.S。我最初的问题是没有运行“hostname”,而是运行更复杂的SQL Server批处理作业。作为奖励点,超过超时的长时间运行的系统任务会被自动杀死吗?我在忙于运行系统任务时读过很多关于超时库没有纪念超时的帖子?
答案 0 :(得分:1)
正在超时块内定义result
变量,因此它在外部作用域中不可见。你应该在之前初始化它:
result = nil
begin
timeout(20) do # Line 4
result = `hostname`
end # Line 6
rescue Timeout::Error
...