Предотвратить открытие файла - PullRequest
1 голос
/ 13 декабря 2010

Я пишу сценарий Python logger, который пишет в файл CSV следующим образом:

  1. Открыть файл
  2. Добавить данные
  3. Закрыть файл(Я думаю, что это необходимо для сохранения изменений, чтобы быть в безопасности после каждой процедуры регистрации.)

ПРОБЛЕМА :
Файл очень доступен через Проводник Windows (Я использую XP).Если файл открыт в Excel, доступ к нему заблокирован Excel.Когда скрипт пытается добавить данные, очевидно, что это не удается, тогда он вообще прерывается.

ЦЕЛЬ:
Есть ли способ заблокировать файл, используя Python, чтобы любой доступ к немуостается эксклюзивным для сценария?Или, возможно, моя методология плоха в первую очередь?

Ответы [ 2 ]

4 голосов
/ 13 декабря 2010

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

theloggingfile.flush()

Таким образом, вы оставляете его открытым для записи в Python, что должно блокировать файл от других программ, открывающих егодля записи.Я думаю Excel сможет открыть его только для чтения, пока он открыт в Python, но я не могу проверить это без перезагрузки в Windows.

РЕДАКТИРОВАТЬ: Я не думаю, что вам нужен шаг ниже..flush() должен отправить его в операционную систему, и если вы попытаетесь просмотреть его в другой программе, ОС должна предоставить ему кэшированную версию.Используйте os.fsync, чтобы заставить операционную систему действительно записать ее на жесткий диск, например, если вы беспокоитесь о внезапных сбоях питания.

os.fsync(theloggingfile.fileno())
0 голосов
/ 13 декабря 2010

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

Но остается вопрос: как Excel может это сделать?

Вы можете сначала попытаться записать во временный файл (о котором Excel не знает), а затем заменить его исходным файлом.

...