为什么os.path.exists(“C:\\ windows \\ system32 \\ inetsrv \\ metaback”)返回False,即使它存在?

时间:2011-02-06 04:20:23

标签: python windows wow64

我有一个python程序,应该清理一些目录,其中一个是C:\windows\system32\inetsrv\metaback;但是,os.path.exists()在该目录上返回False,即使它存在(并且我有权访问它)。

有趣的是,工具windirstat也完全错过了它。

任何人都可以想到这可能是什么原因以及我可以检查它是否存在的另一种方式?我甚至无法在其上运行os.listdir()

更新:如果Windows框为32位,则os.path.exists()适用于此目录,但如果是64位则不行。也可以在32位盒子的windirstat中正确显示。

2 个答案:

答案 0 :(得分:26)

这是工作时系统文件夹的重定向。 When a 32-bit process is running on a 64-bit version of Windows and uses the path %WINDIR%\System32, Windows substitutes %WINDIR%\SysWow64.

该函数返回false告诉您C:\windows\syswow64\inetsrv\metaback不存在,并且它很可能绝对正确。

尝试改为:

os.path.exists("C:\\windows\\sysnative\\inetsrv\\metaback")

答案 1 :(得分:1)

Windows x64安全性比Windows x86更加严格;特别是在当前版本的操作系统下(7,2008)。

听起来您的脚本实际上没有运行所需的权限。一般来说,MS锁定了很多目录路径(如c:\ inetpub),这些目录路径需要提升权限才能执行任何操作。

这有很多原因,通常被认为是一件非常好的事情。

我相信你会想要将你的脚本(或任何执行它)标记为“以管理员身份运行”,以便为其提供高架控制。当然,这可能需要您通过UAC确认执行。

有关详细信息,请访问serverfault.com并询问。