5

我正在编写一个在 Windows 8.1 机器上安装 802.1x 证书的 python 脚本。此脚本在 Windows 8 和 Windows XP 上运行良好(尚未在其他机器上尝试过)。

我已经隔离了这个问题。它与清除文件夹有关

"C:\Windows\system32\config\systemprofile\AppData\LocalLow\Microsoft\CryptURLCache\Content"

问题是我在这个文件夹上使用模块 os 和命令 listdir 来删除其中的每个文件。但是,listdir 错误,说该文件夹不存在,而它确实存在。

问题似乎是os.listdir看不到 LocalLow 文件夹。如果我制作一个两行脚本:

import os

os.listdir("C:\Windows\System32\config\systemprofile\AppData") 

它显示以下结果:

['Local', 'Roaming']

如您所见,缺少LocalLow 。

我认为这可能是权限问题,但我很难弄清楚下一步可能是什么。我从命令行以管理员身份运行该过程,它根本看不到该文件夹​​。

提前致谢!

编辑:将字符串更改为 r"C:\Windows\System32\config\systemprofile\AppData"、"C:\Windows\System32\config\systemprofile\AppData" 或 C:/Windows/System32/config/systemprofile/AppData " 都产生相同的结果

编辑:这个问题的另一个不寻常的皱纹:如果我在该位置手动创建一个新目录,我也无法通过 os.listdir 看到它。此外,我无法通过 Notepad++ 中的“另存为..”命令浏览到 LocalLow 或我的新文件夹

我开始认为这是 Windows 8.1 预览版中的一个错误。

4

3 回答 3

8

我最近遇到了这个问题。

我发现它是由Windows 文件系统重定向器引起的

您可以查看以下 python 片段

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)


#Example usage
import os

path = 'C:\\Windows\\System32\\config\\systemprofile\\AppData'

print os.listdir(path)
with disable_file_system_redirection():
    print os.listdir(path)
print os.listdir(path)

参考:http ://code.activestate.com/recipes/578035-disable-file-system-redirector/

于 2016-04-11T06:20:07.490 回答
5

您的路径中必须有转义序列。您应该对文件/目录路径使用原始字符串:

# By putting the 'r' at the start, I make this string a raw string
# Raw strings do not process escape sequences
r"C:\path\to\file"

或以另一种方式放置斜线:

"C:/path/to/file"

或转义斜线:

# You probably won't want this method because it makes your paths huge
# I just listed it because it *does* work
"C:\\path\\to\\file"
于 2013-10-04T18:03:34.583 回答
1

我很好奇你是如何用这两行列出内容的。您在代码中使用了转义序列 \W、\S、\c、\s、\A。尝试像这样转义反斜杠:

import os
os.listdir('C:\\Windows\\System32\\config\\systemprofile\\AppData')
于 2013-10-04T18:10:50.547 回答