Можно ли использовать проклятия только для чтения нажатия клавиш, но ничего больше? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть некоторый код Python, который не использует проклятия. Возможно, в какой-то момент я изменю это и буду использовать проклятия во всем коде. Тем не менее, теперь это не вариант.

Я искал, как читать одиночное нажатие клавиш в Linux, и единственное возможное решение, которое я нашел, это использование 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

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

Я также попробовал это:

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

в надежде, что curses.initscr() не очистит экран, но это произойдет и, конечно же, неправильная очистка оставит мой терминал в грязном состоянии. государство.

Можно ли использовать проклятия для чтения одной клавиши, но оставить остальные выходные данные "незанятыми"? Если да, что я делаю неправильно?

1 Ответ

2 голосов
/ 22 октября 2019

Функция filter (вызывается до initscr) заставляет curses ограничивать свои обновления одной строкой. Привязка Python включает filter.

Вот пример:

import curses

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