Seite 1 von 1

Lösch-Auftrag - Access is denied

Verfasst: Donnerstag 24. Januar 2008, 15:36
von Zack
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.

Re: Lösch-Auftrag - Access is denied

Verfasst: Donnerstag 24. Januar 2008, 15:51
von keppla
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?

Re: Lösch-Auftrag - Access is denied

Verfasst: Donnerstag 24. Januar 2008, 17:12
von Leonidas
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 {} \;``

Verfasst: Donnerstag 7. Februar 2008, 13:22
von Zack
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?

Verfasst: Donnerstag 7. Februar 2008, 19:02
von noise
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?

Verfasst: Samstag 9. Februar 2008, 12:20
von Zack
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!