Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
First of all, the standard keystroke for interrupting a CLI program would be ctrl + C or whatever the windows equivalent is. Therefore, you will get the most consistent user experience if you use ...
Answer
#2: Post edited
- First of all, the standard keystroke for interrupting a CLI program would be `ctrl + C` or whatever the windows equivalent is.
- Therefore, you will get the most consistent user experience if you use this standard keystroke for interrupting the program (rather than something custom like space).
- One big advantage of using standard keystrokes, is that Python will raise a [`KeyboardInterrupt`](https://docs.python.org/3/library/exceptions.html#KeyboardInterrupt) exception upon detection.
- As a result, we just have to write error handling code to stop the program properly.
- A Minimal Working Example (MWE) of this code could look as follows:
- ```python
- import time
- done = False
- while not done:
- try:
- print("looping")
- time.sleep(1)
- except KeyboardInterrupt:
- done = True
- print("done")
- ```
- It might be even (slightly) better to wrap the entire code as follows:
- ```python
- import time
- try:
- while True:
- print("looping")
- time.sleep(1)
- except KeyboardInterrupt: # not strictly necessary
- pass
- finally:
- print("done")
- ```
- First of all, the standard keystroke for interrupting a CLI program would be `ctrl + C` or whatever the windows equivalent is.
- Therefore, you will get the most consistent user experience if you use this standard keystroke for interrupting the program (rather than something custom like space).
- One big advantage of using standard keystrokes, is that Python will raise a [`KeyboardInterrupt`](https://docs.python.org/3/library/exceptions.html#KeyboardInterrupt) exception upon detection.
- As a result, we just have to write error handling code to stop the program properly.
- A Minimal Working Example (MWE) of this code could look as follows:
- ```python
- import time
- done = False
- while not done:
- try:
- print("looping")
- time.sleep(1)
- except KeyboardInterrupt:
- done = True
- print("done")
- ```
- It might be even (slightly) better to wrap the entire code as follows:
- ```python
- import time
- try:
- while True:
- print("looping")
- time.sleep(1)
- except KeyboardInterrupt: # not strictly necessary
- pass
- finally:
- print("done")
- ```
- ---
- **Addendum:** as indicated in the linked documentation (and mentioned in the comments), it would be important that the `finish_up` function has minimal runtime and allows to exit the program as quickly as possible.
- If the code in `finish_up` is lengthy, it might be useful/necessary to split up the code in a part that makes sure the program leaves a consistent state (if possible without too much overhead) and a (possibly slow) post-processing part that would appear inside of the `try` block. E.g.
- ```python
- import time
- try:
- while True:
- print("looping")
- time.sleep(1)
- post_processing()
- except KeyboardInterrupt: # not strictly necessary
- pass
- finally:
- print("finishing")
- clean_up()
- ```
#1: Initial revision
First of all, the standard keystroke for interrupting a CLI program would be `ctrl + C` or whatever the windows equivalent is. Therefore, you will get the most consistent user experience if you use this standard keystroke for interrupting the program (rather than something custom like space). One big advantage of using standard keystrokes, is that Python will raise a [`KeyboardInterrupt`](https://docs.python.org/3/library/exceptions.html#KeyboardInterrupt) exception upon detection. As a result, we just have to write error handling code to stop the program properly. A Minimal Working Example (MWE) of this code could look as follows: ```python import time done = False while not done: try: print("looping") time.sleep(1) except KeyboardInterrupt: done = True print("done") ``` It might be even (slightly) better to wrap the entire code as follows: ```python import time try: while True: print("looping") time.sleep(1) except KeyboardInterrupt: # not strictly necessary pass finally: print("done") ```