Мой совет: в целях тестирования, вызовите ваш скрипт, используя простой скрипт оболочки-оболочки; заставить скрипт оболочки выполнить команду reset
, чтобы вернуть настройки терминала в рабочее состояние:
#!/bin/sh
eval "$@"
stty -sane
reset
... называйте это как run.sh
и будьте счастливы. Это должно выполнить вашу команду почти точно так же, как ваша оболочка, если вы ввели аргументы как команду (точнее, если вы заключите аргументы в жесткие кавычки).
Чтобы гарантировать, что ваша программа выйдет из терминала в устойчивом состоянии перед лицом необработанных исключений и ненормальных завершений ... либо используйте метод curses.wrapper()
для вызова вашей точки входа верхнего уровня (возможно, main()
или main_curses_ui()
, который вы выберете для реализации) или оберните ваш код в собственную последовательность curses.*
методов, чтобы восстановить видимость курсора, восстановить режим "cbreak" (канонический / готовый ввод), восстановить нормальные настройки "echo" и все, что вы возможно, испортили.
Вы также можете использовать Python: обработчики atexit для регистрации всех ваших действий по очистке. Но все же могут быть случаи, когда ваш код не вызывается - некоторые виды неуловимых сигналов и любая ситуация, когда вызывается os._exit () .
Моя маленькая оболочка сценария оболочки должна быть достаточно надежной даже в этих случаях.