使用 Curses for Python 保存和恢复终端窗口内容

问题描述 投票:0回答:2

我正在使用 Curses (window-curses) 库在 Python 上制作一些控制台应用程序。在某些时候,我需要将窗口状态(或者可能整个终端状态)保存到某个对象/变量并在将来恢复它。 正确的方法是什么?

我在模块文档中找到了通过将状态保存到文件来实现此目的的方法。但也许内存中还存在其他方法来做到这一点。

python curses
2个回答
1
投票

正如您所发现的,您可以使用

putwin
函数 将 pad 保存到文件,并使用
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)

0
投票

如果您有办法保存到文件,则可以将该函数传递给

io.BytesIO
(接受引用/类似文件)或(不太令人愉快)
tempfile.NamedTemporaryFile
(如果它只接受路径)

内存文件的路径,无需转储到 tmp 中

© www.soinside.com 2019 - 2024. All rights reserved.