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
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to