2012-05-21 17 views
16

Duplicar posible:
Python read a single character from the user¿Cómo se acepta presionar tecla en la línea de comando python?

Busco para poder controlar un robot con los cursores usando Python. Y mi idea era implementar código que parecía algo como esto ...

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

Sin embargo, el problema es que no sé cómo conseguir la entrada de los usuarios. Y no puedo usar una solución basada en GUI como pygame de lo que he encontrado porque el robot no usa una pantalla.

¡Cualquier ayuda es muy apreciada!

+0

Idéntica a [esta cuestión] (http://stackoverflow.com/questions/510357/python-read-a-single-character-from-the-user), que tiene varias soluciones. – Junuxx

+0

Es posible que desee examinar ['curses'] (http://docs.python.org/library/curses.html). –

+0

Estaba viendo esa pregunta, pero no pude averiguar si era lo que estaba buscando o no, porque estoy buscando una solución de Linux y eso parecía realmente complicado debido a las necesidades multiplataforma. Miré maldiciones, pero ¿alguien sabe de un buen tutorial sobre cómo usarlo? Lo mejor que pude encontrar fueron los documentos Python y solo llegaron tan lejos. – Elmer

Respuesta

29

Un ejemplo simple de maldiciones. Consulte los documentos para curses module para obtener más información.

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

¿Por qué se muestran dos letras cuando presiono una tecla de letra una vez? Parece que getch mueve el cursor a la derecha de donde lo pone addch. Por lo tanto, cuando presiono la tecla siguiente, se muestra a la izquierda de 20, 25, y luego addch muestra la misma letra en 20, 25, dejando dos caracteres en la pantalla. Supongo que getch no impide que se muestre la letra a la derecha de 20, 25. ¿Cómo puedo desactivar la visualización de lo que ingresé? – allyourcode

+1

allyourcode - agrega 'curses.noecho()' (después de que la llamada a 'cbreak' es buena). Entonces, las maldiciones no se autoimprimirán, solo el script lo hará. – Ian

Cuestiones relacionadas