blob: 37044f996f3f6f8e725f99169be4c26408440d5b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
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)
|