2014-05-06 74 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

相關問題