Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #21226

Re: RotatingFileHandler Fails

Date 2012-03-05 11:27 +0100
From Jean-Michel Pichavant <jeanmichel@sequans.com>
Subject Re: RotatingFileHandler Fails
References <e236bc14-14c4-4574-a0dd-68c8db74a700@p6g2000yqi.googlegroups.com>
Newsgroups comp.lang.python
Message-ID <mailman.400.1330943283.3037.python-list@python.org> (permalink)

Show all headers | View raw


nac wrote:
> The RotatingFileHandler running on win 7 64-bit; py 2.7 is failing
> when the script launches a process using subprocess.Popen. Works fine
> if the subprocess is not launched
>
> The exception thrown
> Traceback (most recent call last):
>   File "C:\Python27\lib\logging\handlers.py", line 78, in emit
>     self.doRollover()
>   File "C:\Python27\lib\logging\handlers.py", line 141, in doRollover
>     os.rename(self.baseFilename, dfn)
> WindowsError: [Error 32] The process cannot access the file because it
> is being used by another process
>
> Anyone have an idea how to fix this?
>
>
> import os, sys
> import logging
> import logging.handlers
> import subprocess
>
> def chomp(s):
>       "remove trailing carriage return"
>       if s[-1:]=='\n': return s[:-1]
>       else: return s
>
> logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %
> (name)-2s %(levelname)-8s %(threadName)-12s %(message)s')
> q5Logger = logging.getLogger('Q5')
> logFileHandler = logging.handlers.RotatingFileHandler(filename='c:\
> \logger\\q5.log', mode= 'a', maxBytes=100, backupCount=5)
> logFileHandler.setFormatter(logging.Formatter('%(asctime)s %(name)-2s %
> (levelname)-8s %(threadName)-12s %(message)s'))
> logFileHandler.setLevel(logging.DEBUG)
> q5Logger.addHandler(logFileHandler)
>
> progOutput = subprocess.Popen(r'dir *.*', shell=True, bufsize=1000,
> stdout=subprocess.PIPE).stdout
> line = progOutput.readline()
> while (line) != "":
>       q5Logger.info( chomp(line))
>       line = progOutput.readline()
> rc = progOutput.close()
>   
I don't think you can open a file from 2 different processes, hence the 
error message. The only exception would be that one of them opens it in 
read only mode which won't happen for log file.

You cannot fix it, it is the operand system that blocks the operation.
Using thread may allow you to log into the same file, but could bring a 
bunch of other problems.

I know some ppl use a log server, your processes using a socket (client) 
logger. You could do that on your local machine. There's a tutorial on 
that in the logging documentation.

JM

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

RotatingFileHandler Fails nac <cookfitz@gmail.com> - 2012-03-03 03:42 -0800
  Re: RotatingFileHandler Fails Jean-Michel Pichavant <jeanmichel@sequans.com> - 2012-03-05 11:27 +0100
    Re: RotatingFileHandler Fails nac <cookfitz@gmail.com> - 2012-03-05 18:17 -0800
      Re: RotatingFileHandler Fails arun1 <arun.sathyan@ust-global.com> - 2012-03-07 05:20 -0800
      Re: RotatingFileHandler Fails arun1 <arun.sathyan@ust-global.com> - 2012-03-07 07:33 -0800

csiph-web