2014-06-19 1 views
3

다음 샘플 코드를 실행하고 "q"를 누르면 올바르게 닫힙니다. "예를 들어 많은 문자와 다른 문자를 많이 입력 한 다음"q "를 누르면" 나가는 것이 아니라 어떻게 해결할 수 있습니까?Python3 + Curses : "q"를 눌러 프로그램을 즉시 끝내는 방법?

import curses, time 

def main(sc): 
    sc.nodelay(1) 

    while True: 
     sc.addstr(1, 1, time.strftime("%H:%M:%S")) 
     sc.refresh() 

     if sc.getch() == ord('q'): 
      break 

     time.sleep(1) 

if __name__=='__main__': curses.wrapper(main) 

답변

5

누르면 다른 키를 사용 n초 (다른 키 스트로크의 n = 번호)를 기다려야한다, time.sleep(1) 전화를 야기한다.

전화를 걸어 time.sleep 전화를 걸어 문제를 해결할 수 있습니다.

def main(sc): 
    sc.nodelay(1) 

    while True: 
     sc.addstr(1, 1, time.strftime("%H:%M:%S")) 
     sc.refresh() 

     if sc.getch() == ord('q'): 
      break 

     #time.sleep(1) <------ 

대안 : (아무 키를 누르면되지 않은 경우에만 더 키가 비 블록 모드에서 누르면되지 않은 경우 getch 반환 -1를) 조건부 time.sleep 전화는 : 기능 window.timeout(delay)은 가능성이 가장 높은

while True: 
    sc.addstr(1, 1, time.strftime("%H:%M:%S")) 
    sc.refresh() 

    key = sc.getch() 
    if key == ord('q'): 
     break 
    elif key < 0: 
     time.sleep(1) 
+0

답장을 보내 주신 많은 분들께 @falsetru에게 감사의 말씀을 전합니다. 그러나 샘플 코드를 언급했듯이 실제 코드는 타임 아웃/새로 고침 옵션이있는 최상위 앱이므로 정의 된 코드와 일치하도록 코드 내부에서 수면을 사용해야합니다 타임 아웃. –

+1

그러면 코드를 더 게시해야합니다 ... – Unda

+1

@ M.Adel,'time.sleep '을 조건부로 호출 하는게 어떨까요? (키가 눌러지지 않았을 때만 :'sc.getch()'는'-1'을 반환합니다) http://pastebin.com/JZgi9ewb – falsetru

0

무엇을 를 찾고 있습니다. 제한 시간이 설정되면 getch은 -1을 반환하기 전에 delay 밀리 초를 기다립니다.

작동 time.sleep(seconds)를 사용하여, timeout 훨씬 청소기와 같이 많이 seconds하여 사용자 입력의 처리 지연에 의한 sleep 매끄러운 사용자 경험을 제공 하겠지만.