在Windows XP上使用Ruby进行系统调用的超时问题

时间:2011-02-10 12:02:30

标签: ruby windows shellexecute

以下代码

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批处理作业。作为奖励点,超过超时的长时间运行的系统任务会被自动杀死吗?我在忙于运行系统任务时读过很多关于超时库没有纪念超时的帖子?

1 个答案:

答案 0 :(得分:1)

正在超时块内定义result变量,因此它在外部作用域中不可见。你应该在之前初始化它:

result = nil 
begin
  timeout(20) do              # Line 4
    result = `hostname`
  end                         # Line 6
rescue Timeout::Error
...