我正在开发一个在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预览中的一个错误。
答案 0 :(得分:5)
我最近遇到了这个问题。
我发现它是由Windows file system redirector
引起的您可以查看以下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/
答案 1 :(得分:3)
您的路径中必须有转义序列。您应该使用原始字符串作为文件/目录路径:
# 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"
答案 2 :(得分:1)
我很好奇你如何用这两行列出内容。您在代码中使用转义序列\ W,\ S,\ c,\ s,\ A.尝试像这样逃避反斜杠:
import os
os.listdir('C:\\Windows\\System32\\config\\systemprofile\\AppData')