python mmap flush() не работает с копией ACCESS
Я пытаюсь сопоставить файл в режиме ACCESS_COPY. Затем я пишу один символ и flush, но flush() возвращает сбой и изменения не записываются обратно в файл. Есть идеи, почему? Спасибо.
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
import os, mmap
f = open('etc.test', 'r+b')
mapped = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_COPY)
print mapped[0]
mapped[0] = 'R'
print mapped.flush() <--- returns 0 (error on Windows)
mapped.close()
f.close()
1 ответ:
Я нашел ответ:
Действительно, это предполагаемое поведение. Из исходного кода python:
if (self->access == ACCESS_READ || self->access == ACCESS_COPY) return PyLong_FromLong(0);
Таким образом, он вернет 0 при использовании ACCESS_COPY. Это нормально, Windows API ведет себя таким образом, корова используется только в памяти, и не будет сброшена обратно.
В любом случае, вы можете записать все данные обратно с помощью f. write ()