Bakes wrote:
On 13 Sep, 22:41, Chris Rebert <c...@rebertia.com> wrote:
On Sun, Sep 13, 2009 at 2:34 PM, Bakes <ba...@ymail.com> wrote:
I am using a simple python script to download my logfiles. This is on
a while loop, the logfile grows rapidly, so it is necessary for python
to start downloading the new script as soon as it has finished the
old.
It works fine (for about 20 minutes), then crashes. I have removed a
couple of excepts, and have narrowed the error down to a 'error_perm:
550 logfile.log: The data is invalid.' error.
Does anyone know what the problem might be regarding this, and what I
might do to fix it?
Including an actual code snippet and the full error traceback would help a lot.

According tohttp://en.wikipedia.org/wiki/List_of_FTP_server_return_codes,
error code 550 translates to:
"Requested action not taken. File unavailable (e.g., file not found,
no access)."

Does the logfile get rotated or something, thus causing it to briefly not exist?

It might also help if you explain how your logfile system works.

Cheers,
Chris
--http://blog.rebertia.com

It's a cod4 gameserver logfile, being downloaded for a python bot to
parse.

The logfile is downloaded using this try/except while loop.


    while True:
        try:
            if ftp == False:
                self.debug('FTP connection not active, attempting to 
(re)connect')
                ftp = self.ftpconnect()
            size=os.path.getsize('games_mp.log')
            ftp.retrbinary('RETR ' + os.path.basename(self.ftpconfig ['path']), 
handleDownload, rest=size)
            if self.console._paused:
                self.console.unpause()
        except:
            print error
            self.debug('Lost connection to server, pausing until updated 
properly, Sleeping 10 seconds')
            self.console.pause()
            try:
                ftp.close()
                self.debug('FTP Connection Closed')
            except:
                self.debug('FTP does not appear to be open, so not closed')
            ftp = False
            time.sleep(10)


I can only assume that occasionally, the logfile is being written to
by the gameserver at the same time that it's downloading.
If this was the case, do you think a try: download except: sleep
900msec then download loop would work?

Bare excepts are almost always a bad idea because they'll catch _all_
exceptions, both those you expect could happen and those you don't.
Catch only those you expect.

For example, if the file 'games_mp.log' doesn't exist then os.path.getsize('games_mp.log') will raise an exception, and if you
forgot to import the os module then that will raise a NameError
exception.

Anyway, I can't see how you leave the loop; I'd expect something like a
'break' statement.

And as a matter of style, I'd prefer None to False to indicate when
there's no FTP connection (and "if not ftp" instead of "if ftp ==
False").
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to