/ / Як натиснути останню клавішу в python? - пітон, кейвент

Як отримати останню натиснуту клавішу в python? - python, keyevent

Спершу хочу сказати, що я знаю, що з прокляттями є рішення.
Моя програма - це цикл, який запускається кожендругий. Кожну секунду я хочу отримати останню клавішу, яка була або натиснута. Отже, якщо ви натискаєте клавішу, коли цикл спить, я хочу, щоб ключ був збережений, щоб я міг отримати ключ, який був натиснутий останнім, навіть коли його більше не натискати. Я не хочу, щоб збережений ключ був "видалений" після його отримання. Тому коли користувач натискав клавішу "a", я хочу отримувати її щосекунди, поки він не натиснув іншу клавішу. Якщо була натиснута певна клавіша, я хочу надрукувати текст. Цей текст я хочу написати у файл, використовуючи перенаправлення stdout:

 ./test.py > file.txt

Моя програма python, вирішена прокльонами, виглядає приблизно так:

import curses
from time import sleep

stdscr=curses.initscr()
stdscr.nodelay(1)
curses.noecho()
curses.cbreak()

while True:
char=stdscr.getch()
if char == 111:        #111 = "o" key
print("test")
break
elif char == 97        #97 = "a" key

#code that have to be run every second
#if the a key is the last pressed key!

sleep(1)

curses.nocbreak()
curses.echo()
curses.endwin()

Проблема з цим рішенням полягає в тому, що прокляття дають мені шалений вихід. Я натискаю лише один раз клавішу "o", і після того, як програма зупиниться, файл.txt виглядає приблизно так:

^[[?1049h^[[1;30r^[(B^[[m^[[4l^[[?7h^[[H^[[2Jtest
^[[30;1H^[[?1049l^M^[[?1l^[>

Але це має виглядати так:

test

Я був би дуже великим, якби хтось написав відповідь. Я знаю, що python не найкращий вибір для програм, що використовують події клавіш. Але у мене є причини, чому я використовую python для цього.

Заздалегідь дякую за відповіді.

Відповіді:

2 для відповіді № 1

Ви можете встановити та використовувати getch пакет

import getch
from time import sleep
while True:
char = getch.getch()
if char == 111:
print("test")
break
sleep(1)

(можливо, вам доведеться використовувати getch.getche замість getch.getch. Це не зовсім зрозуміло з вашого запитання)