Actually, I am not sure how this would work. If I do this, I get no output from the file:
`tail -f sim.out`
So there is something basic I am missing here. Any help?
TIA,
Phy
···
----- Original Message ----
From: Kevin Jackson <foamdino@gmail.com>
To: ruby-talk ML <ruby-talk@ruby-lang.org>
Sent: Thursday, February 22, 2007 1:33:19 AM
Subject: Re: ruby tail
Is there a gem or perhaps a method I am not aware of that does the similar function of tail? Or is there a way to use tail in ruby? I have a file that I want to process as new data is appended to the file. This is easy enough using tail and tail has the added advantage that it can follow a file if it is "rolled".
Just call out to tail
def tail(f)
`tail f`
end
or similar - if tail does what you want, use it
Kev
____________________________________________________________________________________
Need a quick answer? Get one in minutes from people who know.
Ask your question on www.Answers.yahoo.com
Actually, I am not sure how this would work. If I do this, I get no output from the file:
`tail -f sim.out`
So there is something basic I am missing here. Any help?
it shells out to the process and waits for it to return - with -f does
tail ever return? if not you may not be able to use it - AFAIK ` and
exec are the same - someone with better ruby knowledge may be able to
offer a solution - perhaps using threads or something
Actually, I am not sure how this would work. If I do this, I get no output from the file:
`tail -f sim.out`
So there is something basic I am missing here. Any help?
it shells out to the process and waits for it to return - with -f does
tail ever return? if not you may not be able to use it - AFAIK ` and
exec are the same - someone with better ruby knowledge may be able to
offer a solution - perhaps using threads or something
Use IO.popen:
IO.popen('tail -f sim.out'){|f|
while line = f.gets
p line
end
}
Actually, I am not sure how this would work. If I do this, I get no
output from the file:
`tail -f sim.out`
So there is something basic I am missing here. Any help?
it shells out to the process and waits for it to return - with -f does
tail ever return? if not you may not be able to use it - AFAIK ` and
exec are the same - someone with better ruby knowledge may be able to
offer a solution - perhaps using threads or something
Use IO.popen:
IO.popen('tail -f sim.out'){|f|
while line = f.gets
p line
end
}
Out of interest, the blocking call is "gets" here, right? Can you use
Kernel.select on a bunch of those handles?
Actually, I am not sure how this would work. If I do this, I get no output from the file:
`tail -f sim.out`
So there is something basic I am missing here. Any help?
it shells out to the process and waits for it to return - with -f does
tail ever return? if not you may not be able to use it - AFAIK ` and
exec are the same - someone with better ruby knowledge may be able to
offer a solution - perhaps using threads or something
Use IO.popen:
IO.popen('tail -f sim.out'){|f|
while line = f.gets
p line
end
}
You can do it in pure Ruby:
11:14:14 [Temp]: rm x; for ((i=0;i<30;++i)); do echo $i; sleep 0.2; done > x & ruby tail.rb
removed `x'
[1] 2252
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[1]+ Done for ((i=0; i<30; ++i))
do
echo $i; sleep 0.2;
done > x
tail.rb:12:in `sleep': Interrupt
from tail.rb:12:in `tail'
from tail.rb:5:in `loop'
from tail.rb:5:in `tail'
from tail.rb:16
11:14:31 [Temp]: cat tail.rb
# we never return!
def tail(file)
io = File.open(file)
loop do
while ( line = io.gets )
puts line
end
# uncomment next to watch what is happening
# puts "-"
sleep 1
end
end
Actually, I am not sure how this would work. If I do this, I get no
output from the file:
`tail -f sim.out`
So there is something basic I am missing here. Any help?
it shells out to the process and waits for it to return - with -f does
tail ever return? if not you may not be able to use it - AFAIK ` and
exec are the same - someone with better ruby knowledge may be able to
offer a solution - perhaps using threads or something
Use IO.popen:
IO.popen('tail -f sim.out'){|f|
while line = f.gets
p line
end
}
Out of interest, the blocking call is "gets" here, right? Can you use
Kernel.select on a bunch of those handles?
I haven't ever done that, but it looks like it from the docs...