我遇到了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位(英特尔)]
答案 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