清除正在使用的日志文件

时间:2010-11-07 12:00:55

标签: .net python file-io file-permissions

在我的工作中,我正在使用一个写入日志文件的大型.NET应用程序。我们来调用应用程序CompanyApplication。我编写了一个简单的Python脚本来清除日志:

file_object = open('C:\\log.txt', 'w')
file_object.write("")
file_object.close()

CompanyApplication.exe未运行时,这可以正常工作。但是,当CompanyApplication.exe正在运行时,我收到此错误:

  

追踪(最近的呼叫最后):
  在< module>中输入文件“deleteLog.py”,第1行   file_object = open('C:\ log.txt','w')
  IOError:[Errno 13]权限被拒绝:'C:\ log.txt'

这必须是因为CompanyApplication持有对日志文件的锁定。有什么方法可以“解锁”日志文件,清除日志文件,然后“将锁定回锁”到CompanyApplication?我更喜欢可以自动化的解决方案(这就是我首先编写Python脚本的原因)。

其他信息:我可以做很多事情来改变CompanyApplication本身。我使用的是Windows XP专业版。我有管理员权限。

3 个答案:

答案 0 :(得分:3)

您需要在.NET程序的日志文件中填写开放调用的FileShare参数。

具体来说,您需要allow read/write sharing

根据.NET应用程序在写入日志时的工作方式,您所建议的内容可能无法按预期工作,并可能导致.NET程序出现问题。

您可以在.NET程序中启动一个创建事件并等待它的线程。稍后您可以从Python程序中设置该事件,.NET将安全地清除它自己的日志文件并重置事件。

答案 1 :(得分:1)

文件的输出很可能是缓冲的,所以即使你可以接管文件并清空它,你也无法在正在运行的程序中清空缓冲区。结果可能是文件开头的部分条目,或者程序继续在前一个位置写入,这将用垃圾填充到那一点。

为了能够在应用程序运行时清空日志,必须重写应用程序中的日志记录。它必须只在需要时打开日志文件,并在写入后关闭它。这样你的脚本就可以尝试清除文件,如果失败,它可以等一会儿然后再试一次。

答案 2 :(得分:0)

没有。正如您所说,CompanyApplication在文件上有一个锁定。如果任何其他应用程序可以随时解锁,那么锁定的重点是什么?