Python正确查找和读取Windows应用程序事件日志

时间:2013-07-15 22:45:48

标签: python windows bash events

所以我的最终目标是在文件更新触发时使用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脚本无法复制文件,即使它可以在正常的命令提示符下执行。

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

1 个答案:

答案 0 :(得分: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