В Python и вообще - работает ли операция close()
в файловом объекте операция flush()
?
Does close() подразумевает flush() в Python?
Ответ 1
Да. Он использует базовую функцию close()
, которая делает это для вас (источник).
Ответ 2
Примечание: close()
и flush()
не гарантируют, что данные фактически защищены на диске. Это просто гарантирует, что ОС имеет данные ==, которые не буферизуются внутри процесса.
Вы можете попробовать синхронизировать или fsync, чтобы получить данные, записанные на диск.
Ответ 3
filehandle.close не обязательно заподлицо. Удивительно, что filehandle.flush не помогает: он все еще может застрять в буферах ОС при запуске Python. Соблюдайте этот сеанс, когда я написал файл, закрыл его и Ctrl-Z в командной строке оболочки и проверил файл:
$ cat xyz
ghi
$ fg
python
>>> x=open("xyz","a")
>>> x.write("morestuff\n")
>>> x.write("morestuff\n")
>>> x.write("morestuff\n")
>>> x.flush
<built-in method flush of file object at 0x7f58e0044660>
>>> x.close
<built-in method close of file object at 0x7f58e0044660>
>>>
[1]+ Stopped python
$ cat xyz
ghi
Впоследствии я могу снова открыть файл и обязательно синхронизировать файл (потому что в этом случае я открываю его в режиме добавления). Как говорили другие, сценарий синхронизации (доступный из пакета os) должен очищать все буферы на диске, но он может иметь последствия для всей системы (он синхронизирует все файлы в системе).