import sys
from typing import List
+import exceptions
+
def single_keystroke_response(
valid_responses: List[str],
default_response: str = None,
timeout_seconds: int = None,
) -> str:
- class TimeoutError(Exception):
- pass
-
def _handle_timeout(signum, frame) -> None:
- raise TimeoutError()
+ raise exceptions.TimeoutError()
def _single_keystroke_response_internal(
valid_responses: List[str], timeout_seconds=None
) -> str:
+ os_special_keystrokes = [3, 26] # ^C, ^Z
if timeout_seconds is not None:
signal.signal(signal.SIGALRM, _handle_timeout)
signal.alarm(timeout_seconds)
response = readchar.readchar()
if response in valid_responses:
break
+ if ord(response) in os_special_keystrokes:
+ break
return response
finally:
if timeout_seconds is not None:
response = _single_keystroke_response_internal(
valid_responses, timeout_seconds
)
- except TimeoutError:
+ except exceptions.TimeoutError:
if default_response is not None:
response = default_response
if prompt is not None: