在Ruby on Windows XP中进行系统调用时超时问题
下面的代码在Ruby on Windows XP中进行系统调用时超时问题,ruby,windows,shellexecute,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 抛出错误 问题.rb:12:in”:未定义的局部变
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
抛出错误
问题.rb:12:in”:未定义的局部变量或方法
主:对象(名称错误)
但是如果我注释掉timeout元素(第4行和第6行),它就可以正常工作。我尝试过使用IO.popen、IO.select等,但这些都没有帮助。我在许多其他领域使用过这种超时技术,效果很好
它似乎与超时值无关,因为我已经用更大和更小的值进行了实验
我在Windows XP上使用Ruby 1.92。非常感谢您的帮助
p、 我最初的问题不是运行“主机名”,而是更复杂的SQL Server批处理作业。作为奖励,是否会自动终止超过超时的长时间运行的系统任务?我读过很多关于超时库在忙于运行系统任务时不遵守超时的帖子。超时块中定义了结果变量,因此它在外部范围中不可见。您应该在执行以下操作之前对其进行初始化:
result = nil
begin
timeout(20) do # Line 4
result = `hostname`
end # Line 6
rescue Timeout::Error
...
result
变量是在超时块中定义的,因此它在外部范围中不可见。您应该在执行以下操作之前对其进行初始化:
result = nil
begin
timeout(20) do # Line 4
result = `hostname`
end # Line 6
rescue Timeout::Error
...
谢谢你的修复。整个上午都在烦我。谢谢你的修理。整个上午都在烦我。