Очистка файла журнала, который используется - PullRequest
0 голосов
/ 07 ноября 2010

На своей работе я работаю с большим приложением .NET, которое пишет в файл журнала.Давайте назовем приложение CompanyApplication.Я написал простой сценарий Python, который очищает журнал:

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

Когда CompanyApplication.exe не работает, это работает нормально.Однако, когда CompanyApplication.exe запущен, я получаю эту ошибку:

Трассировка (последний последний вызов):
Файл "deleteLog.py", строка 1, в
file_object = open ('C: \ log.txt', 'w')
IOError: [Errno 13] В доступе отказано: 'C: \ log.txt'

Это должно быть потому, чтоCompanyApplication удерживает блокировку файла журнала.Можно ли как-нибудь «разблокировать» файл журнала, очистить его, а затем «вернуть блокировку» на CompanyApplication?Я бы предпочел решение, которое могло бы быть автоматизировано (именно поэтому я и написал скрипт Python в первую очередь).

Дополнительная информация: я могу изменить только CompanyApplication только так.Я использую Windows XP Pro.У меня есть права администратора.

Ответы [ 3 ]

3 голосов
/ 07 ноября 2010

Вам необходимо заполнить параметр FileShare для открытого вызова в файле журнала в вашей .NET-программе.

В частности, вы захотите разрешить совместное чтение / запись .

В зависимости от того, как ваше приложение .NET работает при записи в журнал, то, что вы предлагаете, может работать не так, как ожидалось, и может вызвать проблемы с программой .NET.

Вы можете просто запустить поток в .NET-программе, которая создает событие и ожидает его. Позже вы можете установить это событие из вашей программы на Python, и .NET безопасно очистит свой собственный файл журнала и сбросит событие.

1 голос
/ 07 ноября 2010

Вероятно, что вывод в файл буферизуется, поэтому даже если вы можете взять файл и очистить его, вы не сможете очистить буфер в работающей программе.Результатом будет либо частичная запись в начале файла, либо программа продолжит запись в предыдущую позицию, которая заполнит все до этой точки мусором.

Чтобы иметь возможность очистить журналв то время как приложение работает, регистрация в приложении должна быть переписана.Он должен открывать файл журнала только при необходимости и закрывать его после записи в него.Таким образом, ваш сценарий может попытаться очистить файл, а в случае сбоя он может подождать секунду, а затем повторить попытку.

0 голосов
/ 07 ноября 2010

Нет. Как вы сказали, CompanyApplication имеет блокировку для файла. Какой смысл в блокировке, если любое другое приложение может разблокировать ее в любое время?

...