2012-05-21 2 views
16

가능한 중복 : 내가 찾고 있어요
Python read a single character from the user명령 줄 파이썬에서 keypress를 수락하는 방법?

파이썬을 사용하여 화살표 키를 사용하여 로봇을 제어 할 수 있습니다. 그리고 내 생각은 문제가 내가 사용자의 입력을 얻는 방법을 모르겠입니다 그러나이 같은 것을 보았다 코드 ...

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

을 구현하는 것이 었습니다. 그리고 로봇이 디스플레이를 사용하지 않기 때문에 파이 게임과 같은 GUI 기반 솔루션을 사용할 수 없습니다.

도움이 필요하시면 대단히 감사합니다 !!

+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

나는 그 문제를보고 있었지만 리눅스 솔루션을 찾고 있기 때문에 그것이 찾고자했던 것이지 그렇지 않은지를 알 수 없었다. 이것은 크로스 플랫폼 요구 때문에 정말 복잡해 보였다. 나는 curses를 보았지만 그것을 사용하는 방법에 대한 좋은 지침서를 아는 사람이 있습니까? 내가 발견 할 수있는 가장 좋은 점은 파이썬 독스 였고 지금까지는 그렇게까지 나아갈 수 없었습니다. – 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

글자 키를 한 번 누르면 두 글자가 표시되는 이유는 무엇입니까? getch는 addch가 놓은 곳의 오른쪽으로 커서를 이동하는 것처럼 보입니다. 따라서 다음 키를 누르면 20, 25의 왼쪽에 표시되고 addch는 20, 25에 동일한 문자를 표시하여 화면에 두 개의 문자를 남깁니다. getch는 20, 25의 오른쪽에있는 글자가 표시되는 것을 막지는 못하겠습니까? 입력 한 내용을 표시하지 않으려면 어떻게합니까? – allyourcode

+1

allyourcode -'curses.noecho()'를 추가하십시오 ('cbreak' 호출이 좋다면). 그러면 curses가 키를 자동 인쇄하지 않고 스크립트 만이됩니다. – Ian

관련 문제