2017-07-24 5 views
-1

Ich muss einige Datei von db-Objekten erzeugt verarbeiten und nach dem erforderlichen Prozess muss dieses Verzeichnis mit Dateien zu löschen.Ich habe beschlossen, Python-Tempeldatei-Paket zu verwenden. Ich habe es versuchen, aber stecken auf Direcotry not Empty [ Error 66 ].Python tempfile [Errno 66] Verzeichnis nicht leer

In 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) 

Antwort

1

Ich werde einfach beachten Sie, dass path = os.path.join(tmpdir)path gleich tmpdir macht. Das heißt, wenn ein Verzeichnis nicht leer ist, funktionieren weder os.remove noch os.rmdir.

Hierbei handelt es sich um Betriebssystemaufrufe, die nicht auf Dateien im Verzeichnis rekurrieren.

So verwenden nur

import shutil 
shutil.rmtree(tmpdir) 
Verwandte Themen