Python ne peut pas voir les fichiers ou les dossiers dans C: \ Windows \ System32 \ GroupPolicy

Je suis confronté à un problème où python est incapable de voir les dossiers ou les fichiers qui existent sur l’ordinateur. Je me suis déjà assuré que le chemin ne contient aucun lien symbolique et que je contrôle entièrement les permissions de fichiers NTFS. J’ai même supprimé tous les atsortingbuts cachés. Voici le script que j’utilise et sa sortie:

import os path = 'C:\\Windows\\System32\\GroupPolicy\\Machine' print path test = os.path.exists(path) print test C:\Windows\System32\GroupPolicy\Machine False 

Je ne sais pas pourquoi il renvoie False lorsque je me suis assuré que le dossier existe. Si je supprime “\ Machine” du chemin, il renvoie True. J’ai vérifié que la commande suivante fonctionne à partir d’une invite de commande:

 if exist c:\Windows\System32\GroupPolicy\Machine echo found 

Tous les conseils sur la façon de faire fonctionner ce langage en python seraient appréciés. Voici la version de python que j’utilise: Python 2.7.6 (par défaut, 10 novembre 2013, 19:24:18) [MSC v.1500 32 bits (Intel)] sur win32

Bon, après quelques recherches, nous avons constaté que cela n’était pas lié aux permissions, mais à la redirection du système de fichiers. Comme j’utilise la version x86 de python sur Windows x64 (en utilisant x86 avec py2exe), Windows redirige les requêtes sur System32 et les sous-répertoires vers SysWOW64. Cela signifie que j’étais en train d’interroger “C: \ Windows \ SysWOW64 \ GroupPolicy \ Machine” qui n’existait pas.

Pour résoudre ce problème, j’ai trouvé comment désactiver la redirection du système de fichiers en utilisant la recette trouvée ici: http://code.activestate.com/recipes/578035-disable-file-system-redirector/

Voici mon code final qui fonctionne maintenant pour désactiver la redirection et permet d’ouvrir et d’interroger des fichiers dans System32 sur un ordinateur 64 bits.

 import ctypes class disable_file_system_redirection: _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection def __enter__(self): self.old_value = ctypes.c_long() self.success = self._disable(ctypes.byref(self.old_value)) def __exit__(self, type, value, traceback): if self.success: self._revert(self.old_value) disable_file_system_redirection().__enter__() import os path = 'C:\\Windows\\System32\\GroupPolicy\\Machine' print path test = os.path.exists(path) print test