背景:删除文件报错文件被进程占用
starttime = datetime.datetime.now()
files = os.listdir(os.getcwd())
if 'scan.log' in files:
os.remove(os.path.join(os.getcwd(), 'scan.log'))
if 'scanResult.log' in files:
os.remove(os.path.join(os.getcwd(), 'scanResult.log'))
原因:python logging模块打日志,句柄未释放导致,本地test.py调试不会出问题因为python执行完会退出
解决:在删除文件前,调logging.shutdown()
import logging
from logging.handlers import TimedRotatingFileHandler
formatter = logging.Formatter(
fmt='[%(levelname)s] %(asctime)s %(message)s',
datefmt="%Y-%m-%d_%H:%M:%S"
)
def getLogger(name,logPath):
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
if not logger.handlers:
sh = logging.StreamHandler()
sh.setLevel(logging.ERROR)
fh = TimedRotatingFileHandler(logPath, when='midnight', backupCount=30, encoding='utf-8')
fh.setFormatter(logging.INFO)
sh.setFormatter(formatter)
fh.setFormatter(formatter)
logger.addHandler(sh)
logger.addHandler(fh)
return logger
def shutdown():
logging.shutdown()
排错:
怀疑自己写的with open没释放?按道理会自动释放,加了行f.close还是报错被占用
怀疑上传文件未及时释放,ftp.quit()、ftp.close()、还是不行