我有一个Python程序,应该清理一些目录,其中一个是C:\windows\system32\inetsrv\metaback
; 然而, os.path.exists()
在该目录上返回False,即使它存在(并且我有权访问它)。
有趣的是windirstat工具也完全错过了它。
任何人都可以想到一个原因,为什么这可能是另一种方式,我可以检查,看看它是否存在? 我似乎甚至不能运行os.listdir()
就可以了。
更新:如果Windows框是32位的,则os.path.exists()
在该目录上工作,但如果是64位,则不起作用。 windirstat在一个32位的盒子上也显示正确。
这是工作中系统文件夹的重定向。 在64位版本的Windows上运行32位进程并使用路径%WINDIR%\System32
,Windows会替换%WINDIR%\SysWow64
。
函数返回false来告诉你C:\windows\syswow64\inetsrv\metaback
不存在,而且最有可能是绝对正确的。
改为:
os.path.exists("C:\\windows\\sysnative\\inetsrv\\metaback")
Windows x64的安全性比windows x86要紧密得多, 特别是在当前版本的操作系统下(2008年7月)。
听起来像你的脚本实际上并没有它需要运行的权限。 一般来说,MS锁定了相当多的目录路径(如c:\ inetpub),为了执行任何操作,需要提高权限。
这有很大的原因,这通常被认为是一件非常好的事情。
我相信你会想要标记你的脚本(或者执行它的任何东西)为“以管理员身份运行”,以便让它升级控制。 当然,这可能需要您通过UAC确认执行。
有关更多信息,请访问serverfault.com并在此处询问。