import logging import msvcrt import _subprocess import os def duplicate(handle, inheritable=False): target_process = _subprocess.GetCurrentProcess() return _subprocess.DuplicateHandle( _subprocess.GetCurrentProcess(), handle, target_process, 0, inheritable, _subprocess.DUPLICATE_SAME_ACCESS).Detach() class NoInheritRotatingFileHandler(logging.handlers.RotatingFileHandler): def _open(self): """ Open the current base file with the (original) mode and encoding. Return the resulting stream. """ if self.encoding is None: stream = open(self.baseFilename, self.mode) newosf = duplicate(msvcrt.get_osfhandle(stream.fileno()), inheritable=False) newFD = msvcrt.open_osfhandle(newosf,os.O_APPEND) newstream = os.fdopen(newFD,self.mode) stream.close() return newstream else: stream = codecs.open(self.baseFilename, self.mode, self.encoding) return stream