У меня есть код, который отлично работает на unix системах, но не на Windows. Я хотел бы сделать это кроссплатформенным, но я бьюсь головой о стену. Минимальное повторение выглядит следующим образом:
Файл 1: foo.py
import os
import sys
import logging
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
logger = logging.getLogger('foo')
def main(dir):
logger.addHandler(logging.FileHandler(
os.path.join(dir, 'temporary.log')
))
logger.info("Hello, world!")
Файл 2: main.py
from foo import main
import tempfile
if __name__ == "__main__":
with tempfile.TemporaryDirectory("test") as tmp:
main(tmp)
Что я ожидал бы, так это временный каталог будет создан, файл будет создан в том, куда будут отправляться журналы, и затем оба будут очищены, когда tmp
выйдет из области видимости.
Вместо этого Windows выдает ошибку:
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: '...'
Я пытался изменить режим FileHandler
с режима добавления, я пытался вручную очистить файлы и каталоги, я пытался отложить создание файла до его регистрации и запуска уровня журнала, и я даже пытался создать экземпляр регистратора внутри foo.main
в надежде, что никаких ссылок на обработчик не будет сохранено - независимо от того, я все еще вижу эту ошибку.
Как я могу это исправить?