D
Dieter
Hi group,
I have a problem while reading from a file on BSD-like systems.
I have a writer process which continuously appends data to a file
and a reader (a data logger, something like tail -f), which should
read and analyse date from the file.
It works on Linux, but on BSD-like systems, it only reads one time,
then nothing more, although fstat shows that the file is growing.
And there's also a diff between tell() and the filelen.
If I write a reader in C, then it works, so the problem seems to be
in the python layer.
The writer:
while [ 1 ]; do
echo `date` >> ./file
sleep 1
done
The reader:
import time
import os
f=open("./file", "r")
while True:
print "filelen %d, tell %d, read: %d" % (
os.fstat(f.fileno()).st_size,
f.tell(),
len(f.read()))
time.sleep(1.0)
On Linux:
dieter@linuxbox$ python reader.py
filelen 15215, tell 0, read: 15215
filelen 15215, tell 15215, read: 0
filelen 15251, tell 15215, read: 36
filelen 15251, tell 15251, read: 0
filelen 15285, tell 15251, read: 34
filelen 15285, tell 15285, read: 0
On FreeBSD/OpenBSD/MacOS:
dieter@osx$ python reader.py
filelen 183147, tell 0, read: 183147
filelen 183180, tell 183147, read: 33
filelen 183180, tell 183180, read: 0
filelen 183606, tell 183180, read: 0
filelen 183606, tell 183180, read: 0
I began to analyse it with strace/ktrace, but maybe I am missing something.
Are there any special switches/flags for BSD?
dieter
I have a problem while reading from a file on BSD-like systems.
I have a writer process which continuously appends data to a file
and a reader (a data logger, something like tail -f), which should
read and analyse date from the file.
It works on Linux, but on BSD-like systems, it only reads one time,
then nothing more, although fstat shows that the file is growing.
And there's also a diff between tell() and the filelen.
If I write a reader in C, then it works, so the problem seems to be
in the python layer.
The writer:
while [ 1 ]; do
echo `date` >> ./file
sleep 1
done
The reader:
import time
import os
f=open("./file", "r")
while True:
print "filelen %d, tell %d, read: %d" % (
os.fstat(f.fileno()).st_size,
f.tell(),
len(f.read()))
time.sleep(1.0)
On Linux:
dieter@linuxbox$ python reader.py
filelen 15215, tell 0, read: 15215
filelen 15215, tell 15215, read: 0
filelen 15251, tell 15215, read: 36
filelen 15251, tell 15251, read: 0
filelen 15285, tell 15251, read: 34
filelen 15285, tell 15285, read: 0
On FreeBSD/OpenBSD/MacOS:
dieter@osx$ python reader.py
filelen 183147, tell 0, read: 183147
filelen 183180, tell 183147, read: 33
filelen 183180, tell 183180, read: 0
filelen 183606, tell 183180, read: 0
filelen 183606, tell 183180, read: 0
I began to analyse it with strace/ktrace, but maybe I am missing something.
Are there any special switches/flags for BSD?
dieter