0
votes

Comment parcourir une liste de répertoires pour vérifier s'ils existent toujours après une tentative de suppression?

J'exécute un script pour désinstaller un programme et pour terminer le processus, je vérifie si les répertoires applicables sont supprimés comme prévu. J'ai ce qui suit:

D_PATHS = (
    r'C:\ProgramFiles\D1\FolderA',
    r'C:\ProgramFiles\D1\FolderB',
    r'C:\ProgramFiles\D1\FolderC',
)

for path in D_PATHS:
    self.info('Deleting %s', path)
    if os.path.exists:
        warnings.warn(f'The following directory still exists: {path}')
    else:
        print(f'Removed all required directories')

Lorsque j'exécute le script, il jette toujours l'avertissement que les répertoires existent toujours, même s'ils ne le sont pas. Qu'est-ce que je fais mal? Veuillez excuser ma connaissance très limitée du codage. Je sais qu'il y a probablement une réponse facile que je ne comprends pas.


2 commentaires

Il est possible que vous n'ayez pas l'autorisation


Vous avez oublié les crochets et le paramètre. os.path.exists(path)


3 Réponses :


2
votes

os.path.exists est une fonction, vous devez lui donner un argument:

...
if os.path.exists(path):
    print("Still exists")
...


1 commentaires

Je l'ai essayé avec une fonction et cela me dit toujours que les répertoires existent même si ce n'est pas le cas.



0
votes

Si vous souhaitez imprimer un avertissement pour chaque répertoire existant, vous devez définir un indicateur booléen pour décider à la fin s'il faut imprimer le message "Suppression de tous les répertoires requis".

    for path in D_PATHS:
        self.info('Deleting %s', path)
        if os.path.exists(path):
            warnings.warn(f'The following directory still exists: {path}')
            break
    else:
        print(f'Removed all required directories')

L'alternative, si vous voulez seulement mettre en garde le premier répertoire qui existe toujours, est de break de la for la boucle, dans ce cas , vous pouvez utiliser une else clause sur votre for la boucle pour imprimer le message si aucune break a été rencontrée:

    dirs_exist = False
    for path in D_PATHS:
        self.info('Deleting %s', path)
        if os.path.exists(path):
            warnings.warn(f'The following directory still exists: {path}')
            dirs_exist = True
    if not dirs_exist:
        print(f'Removed all required directories')

Notez que malgré les messages disant "Suppression", le code que vous avez montré ici ne supprime rien. Vous l'avez probablement fait plus tôt dans votre code.


0 commentaires

0
votes

Il est possible que vous ne disposiez pas de la permission et que vous ne puissiez donc pas les supprimer.

1.Générer un python.exe avec pyinstaller.

2.Cliquez droit et cliquez sur l'option "Exécuter en tant qu'administrateur"


1 commentaires

J'ai vérifié manuellement que le script de suppression fonctionne correctement car les répertoires sont supprimés comme prévu.