summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--input_utils.py20
1 files changed, 14 insertions, 6 deletions
diff --git a/input_utils.py b/input_utils.py
index 635e349..5e36db1 100644
--- a/input_utils.py
+++ b/input_utils.py
@@ -22,7 +22,7 @@ def single_keystroke_response(
prompt: str = None,
default_response: str = None,
timeout_seconds: int = None,
-) -> str:
+) -> Optional[str]: # None if timeout w/o keystroke
"""Get a single keystroke response to a prompt."""
def _handle_timeout(signum, frame) -> None:
@@ -49,6 +49,7 @@ def single_keystroke_response(
if timeout_seconds is not None:
signal.alarm(0)
+ response = None
if prompt is not None:
print(prompt, end="")
sys.stdout.flush()
@@ -60,20 +61,27 @@ def single_keystroke_response(
except exceptions.TimeoutError:
if default_response is not None:
response = default_response
- if prompt is not None:
+ if prompt and response:
print(response)
return response
-def yn_response(prompt: str = None, *, timeout_seconds=None) -> str:
+def yn_response(prompt: str = None, *, timeout_seconds=None) -> Optional[str]:
"""Get a Y/N response to a prompt."""
- return single_keystroke_response(
+ yn = single_keystroke_response(
["y", "n", "Y", "N"], prompt=prompt, timeout_seconds=timeout_seconds
- ).lower()
+ )
+ if yn:
+ yn = yn.lower()
+ return yn
+
+def press_any_key(
+ prompt: str = "Press any key to continue...", *, timeout_seconds=None
+) -> Optional[str]:
+ """Press any key to continue..."""
-def press_any_key(prompt: str = "Press any key to continue...", *, timeout_seconds=None) -> str:
return single_keystroke_response(None, prompt=prompt, timeout_seconds=timeout_seconds)