import sys import tty import termios import select import datetime def getch(): """get next character without needing to press enter""" old_settings = termios.tcgetattr(sys.stdin) new_settings = old_settings[:] new_settings[3] &= ~termios.ICANON try: termios.tcsetattr(0, termios.TCSANOW, new_settings) ch = sys.stdin.read(1) finally: termios.tcsetattr(0, termios.TCSANOW, old_settings) return ch def getch_nb(timeout): """gets next character in cbreak; returns false if none; cbreak must be set before""" ch = False if select.select([sys.stdin], [], [], timeout) == ([sys.stdin], [], []): ch = sys.stdin.read(1) return ch def get_valid_char(char_list): """returns input if it matches a list of valid chars, else retruns False""" in_char = getch() for char in char_list: if in_char == char: return in_char return False def get_pos_int(): """returns input as int; returns False if not a positive integer""" try: in_int = int(input()) except: return False else: if in_int < 1: return False return in_int def delta_to_HM(delta): """returns a %H:%M string from a timedelta object""" mins, secs = divmod(int(delta.total_seconds()), 60) return str(mins).zfill(2) + ":" + str(secs).zfill(2)