Python 看不到 C:\Windows\System32\GroupPolicy 中的文件或文件夹

Akb*_*arb 5 windows redirect 32bit-64bit python-2.7

我遇到了一个问题,python 无法看到计算机上确实存在的文件夹或文件。我已经确保路径中没有符号链接,并且我可以完全控制 NTFS 文件权限。我什至删除了任何隐藏的属性。下面是我正在使用的脚本及其输出:

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

C:\Windows\System32\GroupPolicy\Machine
False
Run Code Online (Sandbox Code Playgroud)

当我确保文件夹确实存在时,我不确定为什么它返回 False。如果我从路径中删除“\Machine”,它会返回 True。我已从命令提示符验证以下命令有效:

if exist c:\Windows\System32\GroupPolicy\Machine echo found
Run Code Online (Sandbox Code Playgroud)

任何关于如何在 python 中工作的建议将不胜感激。这是我使用的 Python 版本:Python 2.7.6(默认,2013 年 11 月 10 日,19:24:18)[MSC v.1500 32 位(英特尔)] on win32

Akb*_*arb 5

好吧,经过一番挖掘,发现它与权限无关,而与文件系统重定向有关。由于我在 Windows x64 上使用 x86 版本的 python(使用 x86,因为我使用 py2exe),Windows 正在将 System32 和子目录上的任何查询重定向到 SysWOW64。这意味着我实际上是在查询不存在的“C:\Windows\SysWOW64\GroupPolicy\Machine”。

为了解决这个问题,我找到了如何使用此处找到的配方禁用文件系统重定向:http : //code.activestate.com/recipes/578035-disable-file-system-redirector/

这是我的最终代码,它现在可以禁用重定向并允许在 64 位机器上打开和查询 System32 中的文件。

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
Run Code Online (Sandbox Code Playgroud)