首先,我想说我知道有诅咒的解决方案 我的程序是一个每秒运行的while循环。每一秒我都想得到最后一个被按下的按键。因此,如果你在循环睡眠时按下一个键我想要保存该键,这样我就可以获得最后按下的键,即使它不再被按下了。我不希望保存的密钥在获取后被“删除”。因此,当用户按下“a”键时,我希望每秒钟一次,直到他按下另一个键。如果按下特定键我想打印文本。我希望使用stdout:
的重定向在文件中写入此文本 ./test.py > file.txt
我的python程序用curses解决了这个:
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()
这个解决方案的问题是curses给了我疯狂的输出。我只按一次“o”键,程序停止后,file.txt看起来像这样:
^[[?1049h^[[1;30r^[(B^[[m^[[4l^[[?7h^[[H^[[2Jtest
^[[30;1H^[[?1049l^M^[[?1l^[>
但它应该是这样的:
test
如果有人写回答,我会非常感激。我知道python不是使用keypress事件的程序的最佳选择。但我有理由为什么我使用python这个。
非常感谢您的回答。
答案 0 :(得分:2)
您可以安装和使用getch
包。
import getch
from time import sleep
while True:
char = getch.getch()
if char == 111:
print("test")
break
sleep(1)
(您可能需要使用getch.getche
代替getch.getch
。问题并不完全清楚。