Проблема заключается в том, что блок with open(...) as file: автоматически закрывает файл после своего завершения, тем самым сбрасывая все изменения на диск. Однако вызов flush() вне контекста менеджера контекста не имеет смысла, так как файл уже закрыт.
Чтобы записать данные сразу же после окончания записи в файле внутри блока with, вам следует вызывать метод flush() непосредственно перед выходом из блока with. Также важно убедиться, что курсор файла установлен в начало, если вы хотите читать содержимое сразу после записи.
Вот исправленный вариант вашего кода:
while True:
with open('file.txt', 'w+') as file:
user_input = input('Please enter a string: ')
file.write(user_input + '\n')
# flush() сбрасывает буфер на диск
file.flush()
# Перемещаемся обратно в начало файла для чтения
file.seek (0)
print(
file.read ())
Что изменилось?
Метод flush() вызывается внутри блока with, чтобы гарантировать сброс содержимого буфера на диск до закрытия файла.
Добавлен переход курсора в начало файла с помощью seek(0) перед чтением содержимого.
Читается всё содержимое файла с помощью read(), а не только одна строка, как было раньше.
Теперь ваш код должен работать корректно, и данные будут записываться и читаться сразу после ввода пользователем строки.
with open('file.txt', 'w+') as file:
file.write(input('Please enter a string: '))
file.seek (0)
print(file.readline())
file.flush()
Вот пример кода. Даже с использованием file.flush() данные записываются только при завершении программы. Как записывать их при окончании блока with open?