необходимо вызвать метод flush обработчика файла в python

Я видел код, в котором они использовали file.io (). поэтому, я обыскал вокруг и нашел это сообщение SO . Я понял, почему существует близкий метод. В ответе, который был отмечен как ответ, было написано следующее:

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

Итак, мне было интересно, когда мы очищаем файл с помощью диспетчера контекстов и пишем какой-то текст, а затем, когда код выходит из этого контекстного менеджера, может быть, вероятность того, что текст не был записан в файл? если да, то почему Python не делает это внутри файла. с открытым ( 'dump.txt' , 'w' ) как f : while True : buf = read_off_some_thingy () f . написать ( БУФЫ . декодировать ) () время . сон ( 5 ) () называется? это уже сделано?

python,file,flush,

3

Ответов: 2


3 принят

Объекты файлов в ioмодуле (те, которые вы получаете open) и везде, где вы ожидаете в stdlib, всегда, cat dump.txtкогда они flush, или полагаются на API платформы, которые гарантируют это.

Даже сторонние библиотеки должны " с открытым ( „dump.txt“ , „ж“ ) , как е : в то время как правда : ЬиЙ = read_off_some_thingy () е . Писать ( БУФЫ . Декодировать ()) п . Заподлицо () время . sleep ( 5 ) и с потоком «по их методам, если они хотят, чтобы их объекты были файловыми объектами. 1 close


Основная причина вызова flush- это когда вы еще не закрываете файл, но некоторые другие программы могут захотеть просмотреть содержимое.


Например, многие люди пишут такой код:

fsync

а затем они задаются вопросом, почему, когда они closeили открывают его в «Блокноте» или что-то в этом роде, оно пустое или отсутствует последние 3 строки или срезается посредине линии. Это проблема flush:

flush

Или, наоборот, у них работает тот же код, но проблема в том, что кто-то может вытащить вилку на компьютер (или, что более вероятно, в наши дни, убить ваш контейнер), а затем после перезагрузки они будут иметь поврежденный файл, который разрезает в середине строки, и теперь скрипт perl, который сканирует вывод, не будет запущен, и никто не хочет отлаживать код perl. Разная проблема, одно и то же решение.


Но если вы знаете, что файл будет закрыт какой-то точкой (скажем, потому что есть withинструкция, которая заканчивается до этого), и вам не нужно, чтобы файл был сделан до этого момента, вы не необходимо позвонить flush.


Вы не упомянули flush, что представляет собой еще одну проблему - и намного сложнее, чем у большинства людей, - поэтому я не буду в нее вникать. Но связанный с вами вопрос уже охватывает основы.


1. Всегда есть вероятность, что вы используете некоторую стороннюю библиотеку с файлоподобным объектом, утиные типы которых достаточно близки к файловому объекту для ваших нужд, но это не так. И такой тип может иметь то, closeчто нет flush. Но я, честно говоря, не думаю, что когда-либо видел объект, у которого был flushметод, который не называл его близким.


2

Python делает флеш файл, когда он .close()d, что происходит при выходе из контекстного менеджера.

Связанная запись относится скорее к сценарию, в котором у вас есть, скажем, файл журнала, который открыт в течение длительного времени, и вы хотите, чтобы все записывалось на диск после каждой записи. Вот где ты хочешь .write(); .flush();.

питон, файл, флеш,
Похожие вопросы