PermissionError[WinError 5]

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
TheBombTuber
User
Beiträge: 46
Registriert: Samstag 9. September 2017, 15:48

Hallo,

Ich habe ein Problem.

Einer meiner Codes hat bis heute wunderbar funktioniert.
Wenn ich aber den Code nun anstarte bekomme ich ein PermissionError und weis nicht wieso.

Hier ist mein Code

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Created on Tue Dec  4 08:45:14 2018

@author: cpohlmann
"""

import os
import shutil
import time

path_new = r"\\srv-23v-isea-01\temp\CPO\aft_GRCLITE"
def remove_files(path):
    for filename in os.listdir(path):
        print(os.path.join(filename + " wird entfernt"))
        shutil.rmtree(os.path.join(path, filename))

def add_files(path_new):
    for filename_new in os.listdir(path_new):
        print(os.path.join(filename_new + " wird eingefügt"))
        shutil.copytree(os.path.join(path_new, filename_new), os.path.join(path, filename_new))


try:            
    for path in [
        r"C:\cad\VWG\catia\vwgrclite\opt\aft",
        r"C:\CATIAV5\VWG\catia\vwgrclite\opt\aft",
        ]:
        
        if os.path.isdir(path):
            print('Beim Forfahren wird Catia beendet!!\nBitte alle Daten speichern und "Enter" drücken')
            close = input()
            if close == '':
                os.system("taskkill /f /im CNEXT.exe")
                print("Die alten Additionals werden entfernt.")
                remove_files(path)
                os.system("cls")
                add_files(path_new)
                os.system("cls")
                print("Der Austausch ist abgeschlossen.\nZum beenden Enter drücken.")
                input()
            else:
                print('Programm wird beendet')
                time.sleep(2)
except PermissionError:
    print('Error')
    input()
Wenn ich die Dateien von Hand lösche bekomme ich keinerlei Fehlermeldungen

Mit freundlichen grüßen
TheBombTuber
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Der vollständige StackTrace, den du hier leider nicht zeigst, gibt an, in welcher Zeile der Fehler auftritt.
Es scheint sich um ein Rechteproblem zu handeln. Du möchtest etwas mit einer Datei tun, was du nicht darfst. Entweder weil dir die Rechte fehlen, oder weil die Datei im Augenblick noch geöffnet ist.
TheBombTuber
User
Beiträge: 46
Registriert: Samstag 9. September 2017, 15:48

sparrow hat geschrieben: Mittwoch 9. Januar 2019, 15:46 Der vollständige StackTrace, den du hier leider nicht zeigst, gibt an, in welcher Zeile der Fehler auftritt.
Es scheint sich um ein Rechteproblem zu handeln. Du möchtest etwas mit einer Datei tun, was du nicht darfst. Entweder weil dir die Rechte fehlen, oder weil die Datei im Augenblick noch geöffnet ist.
Hier einmal der StackTrace

Traceback (most recent call last):

File "<ipython-input-13-e51fbf3f2230>", line 33, in <module>
remove_files(path)

File "<ipython-input-13-e51fbf3f2230>", line 15, in remove_files
shutil.rmtree(os.path.join(path, filename))

File "C:\Users\cpohlmann\AppData\Local\Continuum\anaconda3\lib\shutil.py", line 507, in rmtree
return _rmtree_unsafe(path, onerror)

File "C:\Users\cpohlmann\AppData\Local\Continuum\anaconda3\lib\shutil.py", line 386, in _rmtree_unsafe
_rmtree_unsafe(fullname, onerror)

File "C:\Users\cpohlmann\AppData\Local\Continuum\anaconda3\lib\shutil.py", line 386, in _rmtree_unsafe
_rmtree_unsafe(fullname, onerror)

File "C:\Users\cpohlmann\AppData\Local\Continuum\anaconda3\lib\shutil.py", line 391, in _rmtree_unsafe
onerror(os.unlink, fullname, sys.exc_info())

File "C:\Users\cpohlmann\AppData\Local\Continuum\anaconda3\lib\shutil.py", line 389, in _rmtree_unsafe
os.unlink(fullname)

PermissionError: [WinError 5] Zugriff verweigert: 'C:\\cad\\VWG\\catia\\vwgrclite\\opt\\aft\\VEM\\R26\\doc\\VEM4-Methodik1.4.7.pdf'


Die Ordner die vorher gelöscht werden machen keine Probleme. Auch ist keine Datei geöffnet.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TheBombTuber: Geöffnet muss nicht heissen, das Du die bewusst irgendwo, zum Beispiel im Acrobat Reader geöffnet hast. Das kann auch bedeuten, dass zum Beispiel ein Virenscanner oder der Indexer eine lokalen Suchmaschine die Datei gerade geöffnet hat.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
TheBombTuber
User
Beiträge: 46
Registriert: Samstag 9. September 2017, 15:48

__blackjack__ hat geschrieben: Mittwoch 9. Januar 2019, 16:00 @TheBombTuber: Geöffnet muss nicht heissen, das Du die bewusst irgendwo, zum Beispiel im Acrobat Reader geöffnet hast. Das kann auch bedeuten, dass zum Beispiel ein Virenscanner oder der Indexer eine lokalen Suchmaschine die Datei gerade geöffnet hat.
Wenn ich mich nicht irre sollte in diesem Fall [WinError32] auftreten. Eben das die Datei auf die Ich zugreifen möchte von einem anderen Prozess verwendet wird. Oder bin ich da grade auf dem Holzweg.

Auch wundert mich, dass es bis heute immer funktioniert hat.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Zum Code: path_new sollte eine Konstante sein PATH_NEW, und die anderen beiden Pfade unten am besten auch als Konstante an den Anfang der Datei schreiben. Ein os.path.join mit nur einem Argument ist sinnfrei. In `add_files` kommt die Variable `path` aus dem Nichts; alles was eine Funktion braucht, sollte sie über ihre Argumente bekommen. Die Fehlerbehandlung von PermissionError ist unsinnig, da sie den eigentlichen Fehler verwirft, so dass man keine Chance hat, herauszufinden, was denn schiefläuft.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

@TheBombTuber
Welcher Windows-Fehler wann geworfen wird, weiß ich leider nicht.
Aber es ist ein Rechteproblem, kein Problem in deinem Code.
Du kannst auch mal schauen, mit welchen Rechten die Datei angelegt wurde und mit welchen Rechten das Python-Script läuft. Nicht dass die Dateien als Administrator angelegt werden und das Script nur als Benutzer läuft.
Zuletzt geändert von sparrow am Mittwoch 9. Januar 2019, 16:38, insgesamt 1-mal geändert.
TheBombTuber
User
Beiträge: 46
Registriert: Samstag 9. September 2017, 15:48

sparrow hat geschrieben: Mittwoch 9. Januar 2019, 16:18 @TheBombTuber
Welcher Windows-Fehler wann geworfen wird, weiß ich leider nicht.
Aber es ist ein Rechteproblem, kein Problem in deinem Code.
Du kannst auch mal schauen, mit welchen Rechten die Datei angelegt wurde und mit welchen Rechten das Python-Script läuft. Nicht dass die Programm als Administrator angelegt werden und das Script nur als Benutzer läuft.
Ich habe es grade einmal ausprobiert es macht leider keinen unterschied ob ich das Script als Admin oder als Benutzer ausführe. Die Fehlermeldung bleibt gleich
Das wirft für mich nur noch mehr fragen auf.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man Programme nicht ordentlich beendet werden, wie z.B. mit taskkill /f, kann es sein, dass man auf solche Dateien nicht sauber zugeifen kann. Ein Neustart von Windows sollte das Problem dann aber eigentlich lösen.
TheBombTuber
User
Beiträge: 46
Registriert: Samstag 9. September 2017, 15:48

Sirius3 hat geschrieben: Mittwoch 9. Januar 2019, 17:09 Wenn man Programme nicht ordentlich beendet werden, wie z.B. mit taskkill /f, kann es sein, dass man auf solche Dateien nicht sauber zugeifen kann. Ein Neustart von Windows sollte das Problem dann aber eigentlich lösen.
Leider auch hier kein Erfolg.
Ich denke ich werde einfach mal versuchen den Code von Grund auf neu zu schreiben und dann mal schauen was dabei herumkommt.

Vielleicht löst dies schon mein Problem. Ab und an ist Windows eben einfach bockig.

Danke für die Lösungsvorschläge
TheBombTuber
User
Beiträge: 46
Registriert: Samstag 9. September 2017, 15:48

So ich habe den Fehler gefunden. Anscheinend wurde das Programm dadurch blockiert, dass die Dateien schreibgeschützt waren.
Weshalb er nur bei bestimmten Dateien blockiert hat konnte ich nicht herausfinden.

Habe es nun damit gelöst, dass er sobald der Permission Error auftritt die Ordnereigenschaften aus dem Serververzeichniss auf die Lokale Ordnerstruktur kopiert und anschließend alles löscht.

Ist zwar nicht die schönste Lösung aber bis ich etwas besseres finde bleibt es erstmal so. :D
Antworten