spróbuj umieścić jakiś time.sleep opóźnienia (0.2) po otwarciu/usuwania plików lub Wydaje Windows i/lub program antywirusowy WYDANIE
Josh Rosenberg na śledzenie this błąd na rozwój Pythona wskazuje na to samo:
Krótka wersja: Narzędzia indeksujące i antywirusowe zapobiegają usunięciu.
Dłuższa wersja: DeleteFile (i wszystkie rzeczy, które ostatecznie przekazuje do DeleteFile) działają w zabawny sposób w systemie Windows. Wewnętrznie otwiera UCHWYT do pliku, zaznacza go jako oczekujące usunięcie i zamyka UCHWYT. Jeśli nikt nie wkradł się i nie chwycił innego pliku w tym czasie, plik jest usuwany, gdy ukryty jest ukryty HANDLE DeleteFile. Dobrze zaprojektowane narzędzia antywirusowe/indeksujące używają oplocków (http://blogs.msdn.com/b/oldnewthing/archive/2013/04/15/10410965.aspx), aby mogły otwierać plik, ale bezproblemowo zejdą z drogi, jeśli normalny proces wymaga wyłącznej kontroli nad plikiem lub usunięcia go. Niestety "dobrze zaprojektowany" nie jest terminem zazwyczaj związanym z narzędziami antywirusowymi, więc takie błędy są stosunkowo powszechne.
Obejścia takie jak używanie GetTempFileName() i MoveFile() do przeniesienia pliku z drogi będą działały, chociaż uważam, że wprowadzają własne warunki wyścigu (sam plik temp jest tworzony, ale UCHWYT jest natychmiast zamknięty, co może oznacza wyścig do otwarcia pustego pliku przez zły antywirus, który blokuje MoveFile()).
Zasadniczo, jeśli używasz systemu Windows i używasz nieprzyjaznych narzędzi antywirusowych/indeksujących, nie ma czystego rozwiązania, które zachowałoby to samo zachowanie. Nie można ciągle tworzyć i usuwać plików o tej samej nazwie bez ryzyka odmowy dostępu.
To powiedziawszy, prawdopodobnie można uzyskać takie same wyniki, otwierając i zamykając plik tylko raz. Zmień z oryginalnego pseudokod:
Jaki rodzaj pliku próbujesz usunąć? 'os.remove' nie działa z katalogami ... a' removeirs' działa tylko wtedy, gdy katalogi nie są puste. – mgilson
Co stanie się, jeśli nie pojawi się błąd lub wyjątek, a polecenie remove i tak nie działa? – darkgaze