2011-02-10 50 views
1

下面的代碼超時問題在Windows上進行系統調用在Ruby中XP

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結果」爲主要 :對象(NameError )

但如果我註釋掉超時元素(第4和第6行),它工作正常。我曾嘗試使用IO.popen,IO.select等,但沒有任何幫助。我在很多其他領域使用了這種超時技術,並且它工作正常。

它似乎沒有與超時值相關,因爲我已經試驗了更大更小的值。

在Windows XP上使用Ruby 1.92。任何幫助非常感謝。

p.s.我原來的問題沒有運行「主機名」,而是一個更復雜的SQL Server批處理作業。作爲一個獎勵點,超過超時時間的長時間運行的系統任務是否會自動終止?我讀過很多關於超時庫在忙於運行系統任務時沒有遵守超時的帖子?

回答

1

result變量正在超時模塊內部定義,因此它在外部範圍內不可見。您應該初始化它:

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

感謝您的修復。我整個早上都在竊聽我。 – 2011-02-10 14:03:01