2012-05-21 16 views
16

Powiel możliwe:
Python read a single character from the userJak zaakceptować naciśnięcie klawisza python w wierszu poleceń?

szukam, aby móc sterować robotem za pomocą klawiszy strzałek w Pythonie. I moim pomysłem było zaimplementowanie kodu, który wyglądał mniej więcej tak ...

#!/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" 

Problem polega na tym, że nie wiem, jak uzyskać dane wejściowe od użytkowników. I nie mogę użyć rozwiązania opartego na GUI, takiego jak pygame z tego, co znalazłem, ponieważ robot nie używa wyświetlacza.

Każda pomoc jest bardzo ceniona !!

+0

identyczne jak [tej kwestii] (http://stackoverflow.com/questions/510357/python-read-a-single-character-from-the-user), który ma kilka rozwiązań. – Junuxx

+0

Możesz zajrzeć do ['curses'] (http://docs.python.org/library/curses.html). –

+0

Patrzyłem na to pytanie, ale nie mogłem dowiedzieć się, czy to było to, czego szukałem, czy nie, ponieważ szukam rozwiązania linuksowego i to wydawało się bardzo skomplikowane z powodu potrzeb międzyplatformowych. Spojrzałem na przekleństwa, ale czy ktoś wie o dobrym samouczku, jak go używać? Najlepsze, co mogłem znaleźć, to Python Docs i poszli tak daleko. – Elmer

Odpowiedz

29

Prosty przykład przekleństw. Zobacz dokumentację dla curses module, aby uzyskać szczegółowe informacje.

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

Dlaczego wyświetlają się dwie litery, gdy raz uderzę w klawisz literowy? Wygląda na to, że getch przesuwa kursor w prawo od miejsca, w którym jest umieszczany przez addch. Dlatego po naciśnięciu następnego klawisza zostanie wyświetlony na lewo od 20, 25, a następnie addch wyświetla tę samą literę o 20, 25, pozostawiając dwa znaki na ekranie. Zgaduję, że getch nie zapobiega wyświetlaniu litery z prawej strony 20, 25? Jak mogę wyłączyć to, co wpisałem? – allyourcode

+1

allyourcode - dodaj 'curses.noecho()' (po wywołaniu 'cbreak' jest dobre). Wtedy curses nie będzie automatycznie drukować klucza, tylko skrypt będzie. – Ian

Powiązane problemy