ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
I solved my problem by using a function that times out if no key is pressed. It was really hard to find how to make this, so here it is if someone needs it.
def getch(timeout=0.1):
"""Returns single character of raw input or timesout"""
class TimeoutException (Exception):
pass
def signalHandler (signum, frame):
raise TimeoutException ()
def _getch():
global key
try:
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
select.select([sys.stdin], [], [], 0)
key = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return key
except TimeoutException:
print("Timed out")
return key
signal.signal(signal.SIGALRM, signalHandler)
signal.setitimer(signal.ITIMER_REAL, timeout)
try:
result = _getch()
finally:
signal.alarm(0)
return result