Python临时文件 [Errno 66] 目录非空

16 浏览
0 Comments

Python临时文件 [Errno 66] 目录非空

这个问题已经有了答案

如何在Python中删除文件或文件夹?

如何删除一个非空文件夹?

我需要处理一些从数据库对象生成的文件,并在需要的处理后删除该带有文件的目录。我决定使用Python templefile包。我已经尝试过了,但卡在了目录不为空[错误66]。

views.py

def writeFiles(request, name):
    tmpdir = tempfile.mkdtemp()
    instance = request.user.instances.get(name=name)
    print(instance)
    print(instance.name)
    code = instance.serverFile
    jsonFile = instance.jsonPackageFile
    docker = """
    FROM node
    # Create app directory
    RUN mkdir -p /usr/src/app
    WORKDIR /usr/src/ap
    # Install app dependencies
    COPY package.json /usr/src/app/
    RUN npm install
    # Bundle app source
    COPY . /usr/src/app
    EXPOSE 8080
    CMD [ "node", "server" ]"""
    # Ensure the file is read/write by the creator only
    saved_umask = os.umask(0o077)
    server = 'server.js'
    json = 'package.json'
    path = os.path.join(tmpdir)
    print(path)
    try:
        with open(path + '/dockerfile', "w") as dockerfile:
            dockerfile.write(docker)
        with open(path + '/server.js', "w") as server:
            server.write(code)
        with open(path + 'package.json', "w") as json:
            json.write(jsonFile)
        print(os.path.join(tmpdir, json))
    except IOError as e:
        print('IOError:', e)
    else:
        os.remove(path)
    finally:
        os.umask(saved_umask)
        os.rmdir(tmpdir)

admin 更改状态以发布 2023年5月20日
0
0 Comments

我只想指出,path = os.path.join(tmpdir) 使得 path 等于 tmpdir。话虽如此,当目录不为空时,os.removeos.rmdir 都无法工作。

这些是操作系统调用,不会递归到目录中包含的文件。

因此,只需使用

import shutil
shutil.rmtree(tmpdir)

0