1

所以我的最终目标是在文件更新触发时使用 python 读取特定应用程序的 Windows 事件日志。

这是我的问题,我相信 python 无法访问存储在 C:\Windows\System32\winevt\Logs 中的事件日志。每当我尝试读取文件时,都会出现以下错误:

WindowsError: [Error 2] The system cannot find the file specified

我尝试了各种形式的转义、字符串拆分/连接以及在文件路径上使用引号,但我总是遇到同样的错误。我什至在 python 命令提示符中廉价地使用了 os.system('dir "C:\Windows\System32..."') 命令来列出路径中更高的目录以供日志验证访问,我收到类似的错误最多C:\Windows\System32 目录,该目录会很好地列出。

例子:

C:\Windows\System32\winevt\Logs - File not found
C:\Windows\System32\winevt - File not found
C:\Windows\System32 - Lists files

我知道这些目录存在。所以从这里我想我可以使用 bash 脚本将事件日志复制到一个临时文件夹中供 python 读取。我写了一个真正简单的 bash 脚本,其中包含:

xcopy /Y "C:\Windows\System32\winevt\Logs\XXXXXXX" c:\Temp

(XXXXXXX) 是我要为 python 脚本复制的日志的名称。

bash 脚本本身运行良好,但是当我的 python 脚本调用它时它失败,因为找不到它而拒绝复制文件。我什至尝试使用 py2exe 创建一个 exe,然后以管理员模式运行。这也失败了。找不到文件的类似错误。我不确定我是否理解 python 用来调用脚本的权限以及为什么 bash 脚本即使可以在普通命令提示符下复制文件也无法复制文件。

您可以在我的逻辑中指出的任何建议或缺陷都会很棒。我很困。

4

1 回答 1

2

您在 64 位安装的 Windows 上使用 32 位 python。

在大多数情况下,每当 32 位应用程序尝试访问 %windir%\System32 时,访问都会重定向到 %windir%\SysWOW64

您可以使用 os.listdir("c:\windows\sysnative\winevt\logs") 作为一种解决方法,从在 64 位 Windows 上运行的 32 位 python 解释器中读取真实的 system32 目录...

资料来源: http: //msdn.microsoft.com/en-us/library/windows/desktop/aa384187 (v=vs.85).aspx http://support.microsoft.com/kb/942589

于 2013-07-22T08:51:06.850 回答