我有一个小的Flask应用程序,该应用程序利用Python的TemporaryDirectory创建一个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都应在提供zipfile后很好地清理自身。
但是,当我在PythonAnywhere上运行它时,它将引发此错误:
OSError: [Errno 39] Directory not empty: '/home/{user}/{app}/{tempdirectory}'
从逻辑上讲,该错误是有道理的,因为temp目录仍然包含zipfile,但是为什么在生产环境和本地环境中运行它的行为会有差异?