Python无法在C:\ Windows \ System32 \ GroupPolicy

时间:2015-06-20 01:30:46

标签: windows python-2.7 redirect 32bit-64bit

我遇到了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

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

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

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

1 个答案:

答案 0 :(得分:3)

好吧,经过一番挖掘,发现它与权限无关,但与文件系统重定向有关。由于我在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