Löschen von Datein mit "lock"

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
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Hallo,

ich fange gerade an mit Python zu programmieren und bin bisher recht begeistert über die schnelle Erlernbarkeit, die kompakten Quelltexte und gut verständliche Hilfen (mir reichte bisher hier zum lernen ne einfache Befehlsreferenz).

Nun habe ich ein Script, bei dem ich relativ viele Zwischendatein erstelle, die ich gerne sofort wieder löschen will, da bei einem weiteren Schleifendurchlauf Dateien mit dem gleichen Namen wieder erstellt werden. Folgende Zeilen benutze ich zum löschen:

gp.delete_management(sel_Poly)
gp.delete_management(sel_Line)

(muss dazu sagen, dass ich Python für ArcGis Scripte verwende).

Nun bricht das Script mit folgender Fehlermeldung ab:
"Traceback (most recent call last):
File "D:\xxxx\test2.py", line 191, in -toplevel-
Blattschnittentfernung(fc)
File "D:\xxxx\testg2.py", line 91, in Blattschnittentfernung
gp.delete_management(sel_Poly)
RuntimeError:
Cannot get exclusive schema lock. Either being edited or in use by another application.
Failed to execute (Delete)."

Wenn ich dass richtig verstehe, ist die Datei einfach "gelockt", weil soeben erst erstellt? Kann ich diese irgendwie entsperren?
Außerdem wundert mich, dass dieses Problem erst beim 2. Schleifendurchlauf auftritt und beim 1. keine Fehlermeldung ausspuckt wird. Ich lösche die Datein nämlich direkt nachdem ich sie nicht mehr brauche und nicht erst, bei einem neuen Durchlauf.

Habe dieses Problem zwischenzeitlich gelöst, in dem ich für jeden Schleifendurchlauf einen neuen Unterordner erstelle und somit die Datein erst mal nicht löschen muss, aber dass finde ich gerade nicht so elegant und frisst damit am Ende auch zu viel Speicherplatz, da es sich hier um Daten handelt, die über 25 GB in Anspruch nehmen...
BlackJack

Irgendwo hält irgendwer diese Dateien noch geöffnet. Entweder Dein Code, die GIS-Anwendung, oder unter Windows auch immer wieder gerne ein Virenscanner oder eine Desktop-Suchmaschine. Letzteres ist besonders nervig.
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Das GIS an sich, habe ich ja gar nicht geöffnet. Denke aber, dass sie trotzdem durch das GIS gelockt sind. Die Frage ist: gibt es einen einfachen Befehl, mit dem ich diesen lock aufheben kann?
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

meneliel hat geschrieben:Das GIS an sich, habe ich ja gar nicht geöffnet. Denke aber, dass sie trotzdem durch das GIS gelockt sind. Die Frage ist: gibt es einen einfachen Befehl, mit dem ich diesen lock aufheben kann?
Den harten weg, pfad zur Datei suchen und mit os.remove löschen. Weil das ist nicht das OS das lockt, sondern die library, die mit dem GIS kommuniziert.
TUFKAB – the user formerly known as blackbird
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

... seufz ....

ich dachte da komm ich drum herum, weil muss so nicht nur eine, sondern dann gleich mehrere Dateien löschen.

Danke trotzdem.
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Okay, das mit dem os.remove() funktioniert natürlich, nun habe ich nur ein Problem:

Eine meiner temporären Datein besteht eigentlich immer aus mehreren. Nun habe ich mir überlegt, dass ich einfach am Ende eines Schleifendurchlaufes eine Liste erstelle und dann nach und nach jedes Element und damit jede Datei lösche:

Code: Alles auswählen

Del_List = os.listdir(geb_path)
DelFC = Del_List.pop(0)
while DelFC:
      helper.PrintAddMessage ("Remove "+ DelFC, 0)
      os.remove(DelFC)
      DelFC = Del_List.pop(0)
Dabei habe ich folgendes Problem. In dem Ordner mit den Temporären Dateien liegen noch mehrere Unterordner. Die Liste zeigt mir nun alle Elemente an, die Ordner und die Files. Kann ich eine Liste NUR aus den Files erzeugen? Oder gibt es einen Befehl mit dem ich alles löschen kann, egal ob File oder Dir. Hatte es mit:

Code: Alles auswählen

os.removedirs() 
, aber das ging nicht.
Antworten