当我慢慢编写我的日志脚本时,我遇到了一些麻烦。我已经完成了大部分程序,但现在我只是添加了一些生物舒适,例如你可以进入的东西的限制等等。
def HitsPerMinute()
print "Is there a specific hour you would like to see: "
STDOUT.flush
mhour = spectime = gets.strip
#mhour = mhour.to_s
if mhour == '' or mhour == '\n' or (mhour =~ /[a-z]|[A-Z].*/)
puts "Please enter an hour you would like to see."
HitsPerMinute()
#else
#mhour = mhour.to_i
end
mstart = 00
mend = 59
mstart.upto(mend) { |x|
moment = "#{rightnow}:#{zeroadder(mhour)}:#{zeroadder(x)}".strip
print "Server hits at '#{moment}: "
puts `cat /home/*/var/*/logs/transfer.log | grep -c #{moment}`
x = x.to_i
x = x.next
}
end
HitsPerMinute()
在大多数情况下,它工作得很好,除了它似乎存储之前输入的变量。如图所示。
Is there a specific hour you would like to see:
Please enter an hour you would like to see.
Is there a specific hour you would like to see:
Please enter an hour you would like to see.
Is there a specific hour you would like to see: d
Please enter an hour you would like to see.
Is there a specific hour you would like to see: 13
Server hits at '10/Oct/2012:13:00: 48
[...]
Server hits at '10/Oct/2012:13:59: 187
Server hits at '10/Oct/2012:0d:00: 0
Server hits at '10/Oct/2012:0d:01: 0
[...]
Server hits at '10/Oct/2012:0d:57: 0
Server hits at '10/Oct/2012:0d:58: 0
Server hits at '10/Oct/2012:0d:59: 0
Server hits at '10/Oct/2012::00: 0
Server hits at '10/Oct/2012::01: 0
[...]
我在输入变量上使用.strip,但这似乎没有为此问题做任何事情。我尝试使用.flush,但这似乎也没有做多少。甚至如何存储多个变量?
答案 0 :(得分:2)
多次调用HitsPerMinute方法,当if条件结束时,它继续运行,而不是循环执行
def HitsPerMinute()
STDOUT.flush
mhour = ''
while mhour == '' or mhour == '\n' or (mhour =~ /[a-z]|[A-Z].*/) do
puts "Please enter an hour you would like to see."
mhour = spectime = gets.strip
end
mstart = 00
mend = 59
mstart.upto(mend) { |x|
moment = "#{rightnow}:#{zeroadder(mhour)}:#{zeroadder(x)}".strip
print "Server hits at '#{moment}: "
puts `cat /home/*/var/*/logs/transfer.log | grep -c #{moment}`
x = x.to_i
x = x.next
}
end
HitsPerMinute()
它没有在mhour变量上存储多个值,mhour每次调用该方法时只有一个值。在方法到达结束之前,用户被回答输入新值,所以当它最终结束时,之前的调用继续运行,这个例子可能有助于理解:
def method(i)
if i < 5
method(i+1)
end
puts i
end
method(1)
输出:
$ ruby /tmp/test.rb
5
4
3
2
1