Lösch-Auftrag - Access is denied

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

Donnerstag 24. Januar 2008, 15:36

Hi,
ich hab ein kleines Problem, dass ich mit Python einen Ordner nicht Löschen kann.

Erstmal zur Umsetzung - Das Programm hat folgendes zu leisten:
Files auschecken - Docs generieren - Files löschen (wichtig fürs nächste mal auschecken)

Die Problematik dabei, er checkt ja die .svn Folder mit aus, welche ich bisher auf keine mir erdenkliche Weise wieder vernichten konnte. Ich bin mittlerweile auf das Modul shutil.rmtree() ( http://docs.python.org/lib/module-shutil.html ) gestoßen doch auch das bekommt eine "Access is denied" Meldung bei dem versuch die Dateien im .svn Ordner zu löschen.

Hier meine drei Methoden:

Code: Alles auswählen

import glob, os
from shutil import rmtree

def delDir(directory):
    for filename in glob.glob( directory + '/*' ):
        absPath = os.path.abspath( filename )
        basename = os.path.basename( filename )
        if os.path.isdir( absPath ):
            try:
                os.rmdir( absPath )
            except:
                delDir( absPath )
        else:
            try:
                os.remove( absPath )
            except:
                print 'Error:  os.remove(%r) fehlgeschlagen!' % ( absPath )


delDir("myFolder")
rmtree("myFolder")
os.system("del /F /Q myFolder")
Bei anderen ausgecheckten Projekten klappt das Löschen komischerweise auch.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Donnerstag 24. Januar 2008, 15:51

Zack hat geschrieben:Files auschecken - Docs generieren - Files löschen (wichtig fürs nächste mal auschecken)
Alternativ könne man auch statt es jedesmal auszuchecken es nur bei nichtexistenz auschecken und sonst Updaten, ist auch bandbreitenfreundlicher
Hier meine drei Methoden:
Irgendwie sehe ich da nur eine (und das ist strenggenommen eine funktion)

Code: Alles auswählen

 # ...
            try:
                os.rmdir( absPath )
            except:
                delDir( absPath )
beschränke da die Excepts doch erstmal auf genau die Exceptions, die du erwartest.
rmdir wird beispielsweise auch fehlschlagen, wenn absPath nicht existiert, und in diesem Fall wird dir "delDir" auch nicht weiterhelfen.

Hast du mal geguckt, ob die Berechtigungen vielleicht wirklch nicht ausreichen?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 24. Januar 2008, 17:12

Zack hat geschrieben:Die Problematik dabei, er checkt ja die .svn Folder mit aus, welche ich bisher auf keine mir erdenkliche Weise wieder vernichten konnte.
``svn export`` existiert. Git und Mercurial hingegen haben nur einen einzigen ``.git`` oder ``.hg``-Ordner.

Alternativ auch mit ``find``: ``find -type d -name .svn -exec rm -r {} \;``
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

Donnerstag 7. Februar 2008, 13:22

Hätte ich noch erwähnen sollen. Es handelt sich hierbei um Windows.
Das Script wurde als Administrator ausgeführt.

Der Ordner hat scheinbar Unterordner mir "Read Only"-Beschränkung. Gibt es da Möglichkeiten, dass mit Python zu ändern?
noise
User
Beiträge: 62
Registriert: Donnerstag 7. Februar 2008, 00:15

Donnerstag 7. Februar 2008, 19:02

Zack hat geschrieben:Gibt es da Möglichkeiten, dass mit Python zu ändern?
Ist den der tipp von Leonidas so schlecht? Oder geht es jetzt nur unabhängig von tatsächlichen Topic um eine Lösung?
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

Samstag 9. Februar 2008, 12:20

Haa! omg sry, den Post hab ich total überlesen und das bei den wenigen die nur da sind :lol:
Danke Leonidas und noise natürlich :>
Läuft jetzt soweit.

ps: Aber Herr Dr. ich will noch keine Brille. Ich bin doch noch so jung!
Antworten