Skip to main content

pressenter2exit (Press Enter To Exit)

pressenter2exit (“Press Enter To Exit”) facilitates long-running CLI programs to exit in clean and controlled way.

Documentation: pressenter2exit.readthedocs.io.

The Problem

Long running CLI (command line interface) programs can be useful, but there is often a need to exit them in a clean manner (as opposed to, for example, pressing ctrl-c).

Examples

  • Programs that ‘crunch’ on a large number of input data sets, but you want to be able to cleanly interrupt the program after it’s done with the current data set.

  • Programs that run in an ‘infinite loop’ waiting for some sort of input data to appear. You’d like to be able to exit the ‘infinite loop’ in a controlled way.

  • Long-running system tests where you want to run, say, overnight but when you return you want to exit in a controlled way so you can get proper status and statistics (as opposed to ctrl-c).

The benefit to exiting in a controlled way is that you don’t end up with a data set partially processed, in an unknown state, and/or be unable to output statistics from the run. By using pressenter2exit, processing that has been done so far can be useful and not merely thrown away, which can happen if a program is forcefully and immediately aborted.

Example Code

from time import time

from pressenter2exit import PressEnter2Exit

exit_control = PressEnter2Exit()

start_time = time()
# loops until enter is pressed or we reach the end of our run time
while exit_control.is_alive() and time() - start_time < 20.0:
    print("I've been waiting for %f seconds." % (time() - start_time))
    exit_control.join(4.0)  # use join() instead of time.sleep() to ensure an immediate exit
print('Done! Exiting after %f seconds.' % (time() - start_time))

Output when enter is pressed mid-run:

Press enter to exit:
I've been waiting for 0.000005 seconds.
I've been waiting for 4.000108 seconds.
Done! Exiting after 5.331482 seconds.

Output when the program is allowed to finish on its own:

Press enter to exit:
I've been waiting for 0.000006 seconds.
I've been waiting for 4.004918 seconds.
I've been waiting for 8.007299 seconds.
I've been waiting for 12.009813 seconds.
I've been waiting for 16.012574 seconds.
Done! Exiting after 20.016182 seconds.

Platform Support

pressenter2exit doesn’t use any platform specific libraries, so it should run on any platform that supports the CLI (e.g. Windows, MacOS, Linux, etc.).

Metadata

Release files for pressenter2exit 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for pressenter2exit 0.3.1
File Interpreter ABI Platform
pressenter2exit-0.3.1-py3-none-any.whl Python 3 none any Details

Release files / pressenter2exit-0.3.1-py3-none-any.whl

Download URL pressenter2exit-0.3.1-py3-none-any.whl
Size 6.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c16c1d0d38e26ae2f6c8ef6122fd7729c6e58859e2507ec370fbea0fa84e98e3
BLAKE2b-256 checksum
How to use checksums
c8a753380681e5cc8990787a15b0916f0885e5d1e53180968b5e3fbcb3eb550c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.0

Release history Release notifications | RSS feed

This release

0.3.1 This release

1 release file

0.3.0

1 release file

0.2.2

2 release files

0.2.1

2 release files

0.2.0

1 release file

0.1.0

1 release file

0.0.12

1 release file

0.0.11

1 release file

0.0.10

1 release file

0.0.9

1 release file

0.0.8

1 release file

0.0.7

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

1 release file

0.0.2

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page