2016-07-31 61 views
-1

我想添加代碼,以便在用戶輸入q時正確退出我的curses python腳本。我不能只做CTRL+C,因爲然後詛咒不會被正確地解除初始化。當用戶鍵入'q'時,應該如何處理退出python腳本?

我還沒有找到一個很好的解決方案,獲得有超時的用戶輸入,所以程序不會坐在那裏,直到用戶給出一些輸入。

是否有一個簡單的方法創建第二個線程來處理用戶輸入並且可以請求主線程運行一個de-init函數?

+2

看到這裏http://stackoverflow.com/questions/24308583/python3-curses-how-to-press-q-for-ending-program -立即 –

回答

1

建議的答案Python3 + Curses: How to press 「q」 for ending program immediately?是一個起點,但(如使用單獨線程的建議)不是需要的。

下面是一個例子,從以前開始:

import sys, curses, time 

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

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

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

      time.sleep(1) 
     except KeyboardInterrupt: 
      curses.endwin() 
      print "Bye" 
      sys.exit() 

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

當你按下^C,它會發送一個鍵盤中斷。如果你抓住了這一點,你可以告訴詛咒清理(並恢復終端模式)。之後,退出。

單獨的線程無法工作,因爲基礎curses不太可能是線程安全的(並且不太可能有人已經開始使用Python中的功能)。

延伸閱讀:

相關問題