2014-05-06 29 views
5

首先我想说,我知道有一个解决方案与诅咒。
我的程序是一个while循环,每秒运行一次。每一秒我都想得到最后一个被按下的键。所以如果你在循环睡眠时按下一个键,我希望这个键被保存,这样我就可以得到最后按下的键,即使它没有按下时也是如此。我不想让保存的密钥在获取后被“删除”。因此,当用户按下“a”键时,我想每秒钟都拿到它,直到他按下另一个键。如果按下特定的键,我想打印文本。本文我想用标准输出重定向到文件写的:与诅咒解决如何获取在python中按下的最后一个键?

./test.py > file.txt 

我的Python PROGRAMM看起来是这样的:

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() 

obout该解决方案的问题是诅咒让我疯狂输出。我只按一次的“O”键,PROGRAMM停止后file.txt的是这样的:

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

但它应该是这样的:

test 

我会,如果有人很感激写一个答案。我知道python不是使用按键事件的程序的最佳选择。但我有理由为什么我使用python。

非常感谢您提前为您的答案。

+0

如果直接写信给你的文件,而不是重定向标准输出 - 那么你就不会有“疯狂输出“从你的文件中的诅咒... –

+0

我有一些其他的程序写在.fifo中,我总是使用重定向。我想保留这个“格式”,我可以轻松处理它们。 – timakro

回答

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这不是从你的问题彻底清除。)

+0

如果你使用getch,你必须这样做:if char ==“o” – timakro

+0

我希望循环中的代码每秒运行一次并使用键输入。 – timakro

相关问题