2014-05-06 10 views
5

सबसे पहले मैं कहना चाहता हूं कि मुझे पता है कि शाप के साथ समाधान है।
मेरा प्रोग्राम एक समय लूप है जो हर सेकेंड चलाया जाता है। हर सेकेंड मैं आखिरी कुंजी प्राप्त करना चाहता हूं जिसे दबाया गया था या दबाया गया था। तो अगर आप लूप सोते समय एक कुंजी दबाते हैं तो मैं चाहता हूं कि कुंजी सहेजी गई है, इसलिए मैं उस कुंजी को प्राप्त कर सकता हूं जिसे पिछली बार दबाया गया था जब भी इसे दबाया नहीं जाता था। मैं नहीं चाहता कि सहेजी गई कुंजी इसे प्राप्त करने के बाद "हटाया" जाए। तो जब उपयोगकर्ता ने "ए" कुंजी दबाई तो मैं इसे दूसरी बार प्राप्त करना चाहता हूं जब तक कि वह दूसरी कुंजी दबाए। यदि एक विशिष्ट कुंजी दबाया गया था तो मैं पाठ मुद्रित करना चाहता हूं।पायथन में दबाए गए आखिरी कुंजी को कैसे प्राप्त करें?

./test.py > file.txt 

मेरे अजगर programm शाप के साथ हल इस तरह दिखता है: यह पाठ मैं stdout के पुनर्निर्देशन का उपयोग करते हुए एक फ़ाइल में लिखना चाहते

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 कि शाप मुझे पागल कर देता है उत्पादन। मैं केवल एक समय 'ओ' कुंजी दबाएँ और बाद programm बंद कर दिया file.txt इस तरह दिखता है:

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

लेकिन यह इस तरह दिखना चाहिए:

test 

मैं किसी को अगर बहुत आभारी होंगे एक जवाब लिखता है। मुझे पता है कि पाइथन कुंजीपटल घटनाओं का उपयोग कर प्रोग्राम के लिए सबसे अच्छा विकल्प नहीं है। लेकिन मेरे पास कारण हैं कि मैं इसके लिए अजगर का उपयोग क्यों करता हूं।

आपके उत्तरों के लिए बहुत पहले से धन्यवाद।

+0

तो आप के बजाय stdout पुनः निर्देशित की अपनी फ़ाइल को सीधे लिखा है - तो आप "पागल नहीं होगा उत्पादन "आपकी फाइल में श्राप से ... –

+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.getch के बजाय getch.getche उपयोग करने के लिए आवश्यकता हो सकती है यह अपने प्रश्न से पूरी तरह से स्पष्ट नहीं है।)

+0

यदि आप गेटच का उपयोग करते हैं तो आपको करना होगा: यदि char == "o" – timakro

+0

मुझे लूप में कोड चाहिए जो हर सेकेंड चलाता है और कुंजी इनपुट का उपयोग करता है। – timakro

संबंधित मुद्दे