2016-07-31 2 views
-1

Я пытаюсь добавить код для правильного выхода из скрипта purson curses, когда пользователь набирает q. Я не могу просто сделать CTRL+C, потому что тогда проклятия не будут деинициализированы правильно.Как мне следует запускать скрипт python, когда пользователь вводит «q»?

Я не нашел хорошего решения с получением пользовательского ввода с таймаутом, поэтому программа не сидит там, пока пользователь не даст какой-либо ввод.

Есть ли простой способ создания второго потока, который обрабатывает только пользовательский ввод и может запросить основной поток для запуска функции де-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, он посылает прерывание клавиатуры. Если вы поймете это, вы можете сказать проклятиям для очистки (и восстановления режимов терминала). После этого выйдите.

Отдельный поток не будет работать, потому что маловероятно, что основные проклятия являются потокобезопасными (и маловероятно, что кто-то воспользовался функцией Python).

Дальнейшее чтение:

Смежные вопросы