2015-11-11 1 views
1

J'écris un code en Python, dans lequel je vérifie si un certain dossier existe; si c'est le cas, je l'enlève et en crée un nouveau (avec le même nom). Le code est le suivant:Python lance une erreur lors de la suppression d'un répertoire qui est ouvert avec Windows Explorer

if os.path.exists(output_folder): 
    shutil.rmtree(output_folder) 
os.makedirs(output_folder) 

Ce code fonctionne très bien, accepter quand je output_folder que spécifique ouvert avec le windows explorer. Quand il est ouvert, je reçois l'erreur suivante dans mon code:

WindowsError: [Error 5] Access is denied: [foldername] 

Simultanément, windows explorer se met automatiquement au répertoire parent de foldername, et renvoie une erreur.

Existe-t-il un moyen de faire en sorte que python ignore l'erreur et continue de fonctionner, ou est-ce que je demande quelque chose qui est impossible à cause du système?

J'ai essayé d'utiliser shutil.rmtree(output_folder, ignore_errors=True) mais cela n'a rien changé.

Répondre

2

Vous pouvez utiliser la gestion des exceptions de Python pour intercepter l'erreur. Vous devriez également bénéficier d'un court délai avant de créer à nouveau le dossier pour permettre à l'Explorateur Windows de fermer:

import shutil 
import time 


try:  
    shutil.rmtree(output_folder) 
except WindowsError, e: 
    print "Failed to delete"  # Or just pass 

time.sleep(0.5) 
os.makedirs(output_folder) 
+0

Merci @MartinEvans; Je pense que «dormir» est ce qui a fait le travail, parce qu'il ne jette pas l'exception. – Cheshie