2012-05-21 11 views
16

संभव डुप्लिकेट:
Python read a single character from the userकमांड लाइन पायथन में कीप्रेस को कैसे स्वीकार करें?

मैं देख रहा हूँ अजगर का उपयोग कर तीर कुंजियों के साथ एक रोबोट को नियंत्रित करने में सक्षम हो। और मेरे विचार हालांकि समस्या मैं कैसे उन इनपुट प्राप्त करने के लिए पता नहीं है वह यह है कि कोड है कि कुछ इस तरह देखा ...

#!/usr/bin/env python 
# control a robot using python 
exit = 0 
while exit == 0: 
    keypress = ##get keypress, if no key is pressed, continue## 
    if keypress == 'q': 
    exit = 1 
    break 
    elif keypress == KEY_UP: 
    ##robot move forward## 
    elif keypress == KEY_DOWN: 
    ##robot move backward## 
print "DONE" 

लागू करने के लिए किया गया था। और मैं जीयूआई आधारित समाधान का उपयोग नहीं कर सकता जैसा कि मैंने पाया है कि रोबोट एक प्रदर्शन का उपयोग नहीं करता है।

किसी भी मदद की बहुत सराहना की है !!

+0

[इस सवाल] के समान (http://stackoverflow.com/questions/510357/python-read-a-single-character-from-the-user) है, जो कई समाधान है। – Junuxx

+0

आप ['curses'] (http://docs.python.org/library/curses.html) में देखना चाहेंगे। –

+0

मैं उस प्रश्न को देख रहा था, लेकिन यह पता नहीं लगा सका कि मैं क्या देख रहा था या नहीं क्योंकि मैं लिनक्स समाधान की तलाश में हूं और क्रॉस-प्लेटफार्म की ज़रूरतों के कारण यह वास्तव में जटिल लग रहा था। मैंने शापों को देखा, लेकिन क्या किसी को इसका उपयोग करने के तरीके पर एक अच्छा ट्यूटोरियल पता है? सबसे अच्छा मैं पाइथन डॉक्स था और वे अभी तक चले गए थे। – Elmer

उत्तर

29

एक साधारण श्राप उदाहरण। विवरण के लिए curses module के लिए दस्तावेज़ देखें।

import curses 
stdscr = curses.initscr() 
curses.cbreak() 
stdscr.keypad(1) 

stdscr.addstr(0,10,"Hit 'q' to quit") 
stdscr.refresh() 

key = '' 
while key != ord('q'): 
    key = stdscr.getch() 
    stdscr.addch(20,25,key) 
    stdscr.refresh() 
    if key == curses.KEY_UP: 
     stdscr.addstr(2, 20, "Up") 
    elif key == curses.KEY_DOWN: 
     stdscr.addstr(3, 20, "Down") 

curses.endwin() 
+0

यह क्यों है कि जब मैं एक अक्षर कुंजी दबाता हूं तो दो अक्षर प्रदर्शित होते हैं? ऐसा लगता है कि गड़बड़ कर्सर को उस स्थान पर ले जाती है जहां एडच इसे रखता है। इसलिए, जब मैं अगली कुंजी दबाता हूं, तो यह 20, 25 के बाईं ओर प्रदर्शित होता है, और उसके बाद एडीएच स्क्रीन पर दो अक्षर छोड़कर 20, 25 पर एक ही अक्षर प्रदर्शित करता है। मुझे लगता है कि गेट 20 से 25 के दाईं ओर पत्र को प्रदर्शित नहीं होने से रोकता है? मैं प्रदर्शित होने से जो दर्ज किया गया उसे अक्षम कैसे कर सकता हूं? – allyourcode

+1

allyourcode - 'curses.noecho() 'जोड़ें (कॉल करने के बाद' cbreak' अच्छा है)। फिर शाप कुंजी को स्वत: मुद्रित नहीं करेंगे, केवल स्क्रिप्ट होगी। – Ian

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