是否可以仅使用 curses 来读取按键而不是其他任何内容?

Is it possible to use curses only to read a keypress but nothing else?

我有一些 python 代码没有使用 curses。也许在某个时候我会改变它并在所有代码中使用 curses。但是,现在这不是一个选项。

我正在寻找如何读取 linux 中的单个按键,我发现唯一可行的解​​决方案是使用 curses。但是,我不知道是否可以仅使用 curses 来读取密钥,而不会干扰我的终端。

我试过了

def get_key_via_ncurses_impl(win):
    return win.getkey()         
def get_key_via_ncurses():
    x = curses.wrapper(get_key_via_ncurses_impl)
    print(x)
    return x

..但是当调用它时它会清除屏幕,只有在按下键后我才能再次看到原始屏幕(带有我没有使用 curses 的输出)。

我也试过这个:

def get_key_via_ncurses():
    stdscr = curses.initscr()
    x = get_key_via_ncurses_impl(stdscr)
    print(x)
    return x

希望 curses.initscr() 不会清除屏幕,但确实如此,当然,不正确清理会使我的终端处于混乱状态。

是否可以使用 curses 读取单个键,但保留输出的其余部分"uncursed"?如果是,我做错了什么?

filter function (called before initscr) tells curses to limit its updates to a single line. The python binding includes filter.

这是一个例子:

import curses

curses.filter()
stdscr = curses.initscr()
curses.noecho()
foo = stdscr.getkey()
print("result:" + foo)