shutil.rmtree pour supprimer les fichiers en lecture seule

Je veux utiliser shutil.rmtree en Python pour supprimer un répertoire. Le répertoire en question contient un .git contrôle de l'annuaire, ce qui git marques en lecture seule et caché.

L'indicateur de lecture seule causes rmtree à l'échec. Dans Powershell, je le ferais "del -force" pour forcer la suppression de l'indicateur de lecture seule. Est-il un équivalent en Python? J'aurais vraiment préféré ne pas marcher sur la totalité de l'arbre deux fois, mais la onerror argument rmtree ne semble pas à recommencer l'opération, donc je ne peux pas utiliser

def set_rw(operation, name, exc):
    os.chmod(name, stat.S_IWRITE)

shutil.rmtree('path', onerror=set_rw)
  • Avez-vous essayé de supprimer le fichier dans le onerror de rappel?
  • Il est étrange que .git est en lecture seule
  • Je dois faire un plein (récursif) rmtree dans la onerror, car il est la .git sous-répertoire est en lecture seule, mais qui pourrait fonctionner. Et " git est un fait caché et readonly sans doute pour simuler les Unix comportement de non affichage de fichiers de configuration utilisateur. Je pense que le comportement est horrible (hg ne pas le faire) mais je dois vivre avec ça 🙁
  • Vous pouvez modifier les autorisations sur les fichiers d'abord, puis de parcourir et de les modifier, je peux poster une solution pour cela si vous le souhaitez
  • ne serait-ce pas moyenne un double-pied de l'arbre, en utilisant les os.marche à tout et à force RW mode? Si c'est ce que tu veux dire, je sais comment faire (comme je l'ai dit, je veux juste éviter si je peux). Mais merci pour la suggestion.
  • Vous n'avez pas à marcher deux fois, tout comme vous marchez modifier les autorisations, puis supprimer le fichier. En outre, je ne suis pas sûr de ce que votre système, mais si ses Fenêtres les autorisations sont héritées, de sorte que vous devriez être en mesure de modifier le niveau supérieur et l'avoir en cascade vers le bas si ils sont bien mis en place

InformationsquelleAutor Paul Moore | 2014-01-21