Различное поведение с send_file и tempfile на локальном компьютере против производственного сервера - PullRequest
0 голосов
/ 12 июля 2019

У меня есть небольшое приложение Flask, которое использует временный каталог Python для создания zip-файла и его возврата клиенту.Фрагмент кода выглядит следующим образом:

import tempfile, os, shutil
def process():
    with tempfile.TemporaryDirectory(dir=os.getcwd()) as tmpdir:
        with tempfile.TemporaryDirectory(dir=tmpdir) as wrapper_dir:

            #some processing
            zipfile = shutil.make_archive("azipfile", "zip", wrapper_dir)

        return send_file(zipfile, mimetype="zip", attachment_filename="azipfile.zip", as_attachment=True)

Он вложит 2 временных каталога, заархивирует внутренний каталог и отправит заархивированный файл пользователю.Если я запускаю приложение на своем компьютере локально, оно ведет себя как положено и не оставляет никаких каталогов или файлов, так как и диспетчер контекста, и файл tempfile должны были хорошо очиститься после обработки zip-файла.

Однако, когда я запускаю это на PythonAnywhere, он выдаст эту ошибку:

OSError: [Errno 39] Directory not empty: '/home/{user}/{app}/{tempdirectory}'

Логически, ошибка имеет смысл, так как временный каталог все еще содержит zip-файл, но почему есть разница в поведениизапустить его в производстве по сравнению с местным?

...