Pfad aus Fehlermeldung nutzen

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

sparrow hat geschrieben: Dienstag 22. Januar 2019, 06:47 @TheBombTuber: Deine Lösung steckt in einer Endlosschleife, sollte sich das Rechteproblem mit dem chmod nicht beseitigen lassen.

Ansonsten tendiere ich wie BJ rmtree() mit onerror.
Mir ist auch heute mein eigentlich größter Fehler aufgefallen. Warum sollte ich den darauf warten, dass der Permission Error auftritt vor allem da theoretisch irgendwann auch mal ein Rechte Problem auftauchen kann also Admin benötigt und alles dann sowieso niemals enden würde.

Und nachdem ich davon abgekommen bin, dass ich unbedingt die Fehlermeldung bekämpfen muss umgehe ich sie jetzt einfach.

Code: Alles auswählen

def get_permission(path):
    for root, dirs, files in os.walk(path, topdown=True):
                    for name in files:
                        os.chmod(os.path.join(root, name), stat.S_IWRITE)

Code: Alles auswählen

import os
import shutil
import time
import stat

benutzer = os.getlogin()
path_new = r"\\srv-23v-isea-01\temp\CPO\aft_GRCLITE"

def remove_files(path):
    for filename in os.listdir(path):
        try:
            print(filename + " wird entfernt")
            shutil.rmtree(os.path.join(path, filename))
        except FileNotFoundError:
            print("Zu Löschende Datei konnte nicht gefunden werden")

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

def get_permission(path):
    for root, dirs, files in os.walk(path, topdown=True):
                    for name in files:
                        os.chmod(os.path.join(root, name), stat.S_IWRITE)
                        
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("Hallo " + benutzer)
        print('Bitte beachte, dass beim Forfahren Catia beendet wird!!\nBitte alle Daten speichern und anschließend "Enter" drücken')
        close = input()
        if close == '':
            os.system("taskkill /f /im CNEXT.exe")
            print("Die alten Additionals werden entfernt.")
            get_permission(path)
            time.sleep(2)
            remove_files(path)
            print("Alle Datein erfolgreich entfernt")
            time.sleep(2)
            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')
Den warum etwas unsicher bekämpfen, wenn man es verhindern kann
Sirius3
User
Beiträge: 17757
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum benutzt Du nicht onerror von rmtree?

Eine Funktion die `get_permission` heißt, sollte keine Rechte SETZEN.
TheBombTuber
User
Beiträge: 49
Registriert: Samstag 9. September 2017, 15:48

Sirius3 hat geschrieben: Dienstag 22. Januar 2019, 09:36 Warum benutzt Du nicht onerror von rmtree?

Eine Funktion die `get_permission` heißt, sollte keine Rechte SETZEN.
Danke für den hinweis mit 'get_permission' habe meinen Schreibfehler korrigiert und es auf 'set_permission' geändert.

Wenn ich mit onerror Arbeite habe ich doch das Problem, dass wenn Administratorrechte benötigt werden der Fehler nicht eindeutig ist.

Oder liege ich falsch?
Antworten