2014-05-06 21 views
5

Önce küfürlerle bir çözüm olduğunu biliyorum.
Programım, her saniye çalışan bir süre döngüdür. Her saniyede olan veya basılan son anahtarı almak istiyorum. Bu nedenle, döngü uyurken bir tuşa basmanız durumunda anahtarın kaydedilmesini istiyorum, böylece daha fazla basılmadığında bile en son basılan anahtarı alabilirim. Kaydedilen anahtarın, aldıktan sonra "silinmiş" olmasını istemiyorum. Böylece, kullanıcı "a" tuşuna bastığında, başka bir tuşa bastığında her saniyesini almak istiyorum. Belirli bir tuşa basıldığında, metin yazdırmak istiyorum. küfürler ile çözüldüPython'da son tuşa nasıl basılır?

./test.py > file.txt 

Benim piton programm şöyle görünür: Bu metin i stdout yeniden yönlendirmesi kullanarak bir dosyaya yazmak istiyorum

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

bu çözümün obout sorun küfürler beni deli sağlamasıdır çıktı. Sadece bir defa "o" tuşuna basınız ve programm durdu sonra file.txt şuna benzer:

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

Ama bu gibi görünmelidir:

test 

Birisi eğer çok minnettar olacaktır bir cevap yazıyor. Python'un tuşa basma olaylarını kullanan programlarda en iyi seçim olmadığını biliyorum. Ama bunun için python kullanmamın nedenleri var.

Yanıtlarınız için şimdiden çok teşekkür ederiz.

+0

- o zaman "deli olmazdı Dosyanızdaki küfürlerden çıktı ... –

+0

.Fifo'da başka bir program yazıyor ve her zaman yönlendirme kullanıyorum. Bu "formatı", bunları kolayca halledebileceğim şekilde tutmak istiyorum. – timakro

cevap

2

getch paketini yükleyebilir ve kullanabilirsiniz.

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

(sen getch.getch yerine getch.getche kullanmanız gerekebilir Bu sorunuza tamamen açık değil.) Yerine stdout'u yönlendirme dosyanıza doğrudan yazdı

+0

Eğer getch kullanırsanız, yapmanız gereken: eğer char == "o" – timakro

+0

Her saniyede çalışan ve anahtar girişini kullanan döngüde kod istiyorum. – timakro

İlgili konular