Nubie question: how to not pass "self" in call to seek() function ?
Barak, Ron
Ron.Barak at lsi.com
Thu Jan 8 09:11:20 EST 2009
Hi,
I am getting the error TypeError: seek() takes exactly 2 arguments (3 given), namely:
$ ./_LogStream.py
Traceback (most recent call last):
File "./_LogStream.py", line 47, in <module>
log_stream.last_line_loc_and_contents()
File "./_LogStream.py", line 20, in last_line_loc_and_contents
self.input_file.seek(-1, 2) # grab the last character
TypeError: seek() takes exactly 2 arguments (3 given)
When I run the below code.
I understand that the extra argument is the "self", but I don't know how to change my class to make the seek(-1,2) work.
Could you help ?
Thanks,
Ron.
$ cat _LogStream.py
#!/usr/bin/env python
import gzip
import sys
from Debug import _line as line
class LogStream():
def __init__(self, filename):
self.filename = filename
self.input_file = self.open_file(filename)
self.index_increment = 10
self.last_line_offset = -1
def last_line_loc_and_contents(self, estimated_line_size=1024):
assert estimated_line_size > 0
file_size = len(self.input_file.read())
self.input_file.seek(-1, 2) # grab the last character
if self.input_file.read(1) == '\n': # a "proper" text file
file_size -= 1
def open_file(self, in_file):
"""
The gzip module checks if the input file is a gzipped file, only at the read stage.
This is why the f.readline() is needed.
"""
try:
f = gzip.GzipFile(in_file, "r")
f.readline()
except IOError:
f = open(in_file, "r")
f.readline()
f.seek(0)
return(f)
if __name__ == "__main__":
filename = "../save_state/hp/save_state-ssp8400-0709R00004_081126-121659/var/log\\sac.log.4.gz"
log_stream = LogStream(filename)
log_stream.limit_ = 1000
log_stream.index_increment = 12
log_stream.last_line_loc_and_contents()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20090108/3cf9b861/attachment.html>
More information about the Python-list
mailing list