Я делаю консольное приложение на Python с библиотекой Curses (window-curses). В какой-то момент мне нужно сохранить состояние окна (или, возможно, все состояние терминала) в какой-то объект/переменную и восстановить его в будущем. Как правильно это сделать?
В документации модуля я нашел методы, которые делают это путем сохранения состояния в файл. Но, возможно, существует какой-то другой способ сделать это в памяти.
Кстати, вас тоже могут заинтересовать благословения! pypi.org/project/blessings






Если у вас есть способ сохранить в файл, вы можете передать этой функции io.BytesIO (принимает ссылку/файл) или (менее приятно) tempfile.NamedTemporaryFile, если она принимает только путь
Как вы обнаружили, вы можете использовать такие вещи, как функция putwin, чтобы сохранить блокнот в файл и getwin, чтобы восстановить его из файла. Если вы хотите сохранить это в памяти, а не в файле на диске, вы можете использовать объект BytesIO вместо настоящего дескриптора файла.
import io
import curses
curses.initscr()
pad = curses.newpad(100, 100)
# ... do things with the pad
# save the pad in memory
f = io.BytesIO()
pad.putwin(f)
# later recall the data
f.seek(0) # reset the cursor to the beginning of the "file"
pad.getwin(f)
Вы также можете написать несколько функций, чтобы описать это по-другому:
def save_win(win) -> bytes:
f = io.BytesIO()
win.putwin(f)
bytes_data = f.getvalue()
return bytes_data
def load_win(bytes_data: bytes) -> curses.window:
f = io.BytesIO(bytes_data)
f.seek(0)
return curses.getwin(f)
Единственное, что я могу придумать автоматически, — это переключение между альтернативным экранным буфером и обратно.