import curses import signal import atexit import os, sys from sys import argv, exit def handler(signum, frame): curses.endwin() exit(1) # def exit_handler(): # curses.endwin() init = None driver = None def curses_wrapper(screen): curses.noecho() curses.cbreak() screen.keypad(True) init(screen) while True: result = driver(screen) if result != None: return result def widget_wrapper(p_init, p_driver): signal.signal(signal.SIGINT, handler) # atexit.register(exit_handler) global init, driver init = p_init driver = p_driver with open('/dev/tty', 'rb') as inf, open('/dev/tty', 'wb') as outf: saved_stdin = os.dup(0) saved_stdout = os.dup(1) saved_stderr = os.dup(2) os.dup2(inf.fileno(), 0) os.dup2(outf.fileno(), 1) os.dup2(outf.fileno(), 2) result = curses.wrapper(curses_wrapper) os.dup2(saved_stdin, 0) os.dup2(saved_stdout, 1) os.dup2(saved_stderr, 2) return result