{ "info": { "author": "James Abel", "author_email": "j@abel.co", "bugtrack_url": null, "classifiers": [], "description": "\n\npressenter2exit (Press Enter To Exit)\n=====================================\n\npressenter2exit (\u201cPress Enter To Exit\u201d) facilitates long-running CLI\nprograms to exit in clean and controlled way.\n\nDocumentation: `pressenter2exit.readthedocs.io\n`_.\n\nThe Problem\n===========\n\nLong running CLI (command line interface) programs can be useful, but\nthere is often a need to exit them in a clean manner (as opposed to, for\nexample, pressing ctrl-c).\n\nExamples\n--------\n\n- Programs that \u2018crunch\u2019 on a large number of input data sets, but you\n want to be able to cleanly interrupt the program after it\u2019s done with\n the current data set.\n- Programs that run in an \u2018infinite loop\u2019 waiting for some sort of\n input data to appear. You\u2019d like to be able to exit the \u2018infinite\n loop\u2019 in a controlled way.\n- Long-running system tests where you want to run, say, overnight but\n when you return you want to exit in a controlled way so you can get\n proper status and statistics (as opposed to ctrl-c).\n\nThe benefit to exiting in a controlled way is that you don\u2019t end up with\na data set partially processed, in an unknown state, and/or be unable to\noutput statistics from the run. By using pressenter2exit, processing\nthat has been done so far can be useful and not merely thrown away,\nwhich can happen if a program is forcefully and immediately aborted.\n\nExample Code\n------------\n\n.. code:: python\n\n\n from time import time\n\n from pressenter2exit import PressEnter2Exit\n\n exit_control = PressEnter2Exit()\n\n start_time = time()\n # loops until enter is pressed or we reach the end of our run time\n while exit_control.is_alive() and time() - start_time < 20.0:\n print(\"I've been waiting for %f seconds.\" % (time() - start_time))\n exit_control.join(4.0) # use join() instead of time.sleep() to ensure an immediate exit\n print('Done! Exiting after %f seconds.' % (time() - start_time))\n\nOutput when enter is pressed mid-run:\n\n::\n\n Press enter to exit:\n I've been waiting for 0.000005 seconds.\n I've been waiting for 4.000108 seconds.\n Done! Exiting after 5.331482 seconds.\n\nOutput when the program is allowed to finish on its own:\n\n::\n\n Press enter to exit:\n I've been waiting for 0.000006 seconds.\n I've been waiting for 4.004918 seconds.\n I've been waiting for 8.007299 seconds.\n I've been waiting for 12.009813 seconds.\n I've been waiting for 16.012574 seconds.\n Done! Exiting after 20.016182 seconds.\n\nPlatform Support\n----------------\n\npressenter2exit doesn\u2019t use any platform specific libraries, so it\nshould run on any platform that supports the CLI (e.g. Windows, MacOS,\nLinux, etc.).\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/jamesabel/pressenter2exit/archive/master.zip", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jamesabel/pressenter2exit", "keywords": "cli,exit,control", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "pressenter2exit", "package_url": "https://pypi.org/project/pressenter2exit/", "platform": "", "project_url": "https://pypi.org/project/pressenter2exit/", "project_urls": { "Download": "https://github.com/jamesabel/pressenter2exit/archive/master.zip", "Homepage": "https://github.com/jamesabel/pressenter2exit" }, "release_url": "https://pypi.org/project/pressenter2exit/0.2.2/", "requires_dist": null, "requires_python": "", "summary": "Facilitates exit of a Python CLI program in a controlled way", "version": "0.2.2" }, "last_serial": 5360961, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "1e163f73ed79819338c163274164fefe", "sha256": "86443ea7d591dd7f23ef9ebc77a606445d088e7c229b26abc498b3cc5585a142" }, "downloads": -1, "filename": "pressenter2exit-0.0.1.tar.gz", "has_sig": false, "md5_digest": "1e163f73ed79819338c163274164fefe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1073, "upload_time": "2017-09-30T18:33:16", "url": "https://files.pythonhosted.org/packages/71/f9/f0a5962ac2725dc2ac82f84e4b40dc6875018c56a83590559f964995820c/pressenter2exit-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "a4704393badf0e41f85697ee9e8968fb", "sha256": "6895c42f5ff52d3e23783e7f2953ed21d3add306ed598c93fafedc0a4c4825bb" }, "downloads": -1, "filename": "pressenter2exit-0.0.10.tar.gz", "has_sig": false, "md5_digest": "a4704393badf0e41f85697ee9e8968fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3119, "upload_time": "2017-10-02T06:10:57", "url": "https://files.pythonhosted.org/packages/a2/3a/c3a9a7ae7f62e438b0be9e6f78a68532990bffe78d07a674c9c3323f3e78/pressenter2exit-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "771e73d6fc643c5f8f8cbcc335f5ef63", "sha256": "68dd99ef84a51c21f17c0529c8009370c6903d58cc07d6045155a3236e8ace9f" }, "downloads": -1, "filename": "pressenter2exit-0.0.11.tar.gz", "has_sig": false, "md5_digest": "771e73d6fc643c5f8f8cbcc335f5ef63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3193, "upload_time": "2017-12-03T04:47:01", "url": "https://files.pythonhosted.org/packages/53/84/ba64011395094263fd21178f9923c353d4971a6928b44fea716cbb03aff0/pressenter2exit-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "fd9626fa4d46127d3d7088aab5ad09af", "sha256": "9164ce40a93590438c0f1f6bd4b0bf0e15cf6224895e67efdcbd2cfff2a8e5e5" }, "downloads": -1, "filename": "pressenter2exit-0.0.12.tar.gz", "has_sig": false, "md5_digest": "fd9626fa4d46127d3d7088aab5ad09af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3190, "upload_time": "2017-12-19T09:28:33", "url": "https://files.pythonhosted.org/packages/72/f1/b7f87620fb26977ce2c4cda587351e3e6be18fd8bba634e4070038086bc1/pressenter2exit-0.0.12.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "ae2320f0205979697b0d558f1b529d42", "sha256": "947cbea5d127c675e2226529b2685658843337f804c0e3ffaf835e6836cf54af" }, "downloads": -1, "filename": "pressenter2exit-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ae2320f0205979697b0d558f1b529d42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1087, "upload_time": "2017-09-30T18:41:35", "url": "https://files.pythonhosted.org/packages/28/fe/2d4446b0df4df188fd6ee5e97273a3d2d2cc069c0a9a6d47f7e6981d973b/pressenter2exit-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "26127b67a1a64a1686042390902ef3c6", "sha256": "0f3eaf7b9b677ef6733cab38d6f5d76236264f975e9db9bbb3087c40a03db871" }, "downloads": -1, "filename": "pressenter2exit-0.0.3.tar.gz", "has_sig": false, "md5_digest": "26127b67a1a64a1686042390902ef3c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2386, "upload_time": "2017-10-01T01:59:32", "url": "https://files.pythonhosted.org/packages/09/3b/c38cf5a976eafb47e8211340fc396ce61e04658020104345f1b7ffcb7427/pressenter2exit-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "f36584aa3a74a386cfc281478c55cf16", "sha256": "255ded4827ad5e9782754cb4b88848a75cf238bc6f2be616fad2de034d5bccf1" }, "downloads": -1, "filename": "pressenter2exit-0.0.4.tar.gz", "has_sig": false, "md5_digest": "f36584aa3a74a386cfc281478c55cf16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2386, "upload_time": "2017-10-01T02:12:06", "url": "https://files.pythonhosted.org/packages/83/87/417c3404daf1f126d7e0936291bf5ec3f659468bb4949dfa9d89b0a4f794/pressenter2exit-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "6eeacbe1ceba1328562f9ccb343cb139", "sha256": "72d0c3414706f24322b06492e39a859285358ee3041318dbe52ccbcb59d3e45a" }, "downloads": -1, "filename": "pressenter2exit-0.0.5.tar.gz", "has_sig": false, "md5_digest": "6eeacbe1ceba1328562f9ccb343cb139", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2784, "upload_time": "2017-10-01T02:20:22", "url": "https://files.pythonhosted.org/packages/7e/58/dc5d3429aacd802d1442eaa4f441d9a7262efc74e71c01ecbbdb6ab4563a/pressenter2exit-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "0a83a37b732ed3adea1f2db41a05e39a", "sha256": "e8c4a117479b57102189ec384d6a429f80ea7a84cbf6500ec4875e8fa6a95a69" }, "downloads": -1, "filename": "pressenter2exit-0.0.6.tar.gz", "has_sig": false, "md5_digest": "0a83a37b732ed3adea1f2db41a05e39a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2886, "upload_time": "2017-10-01T02:45:58", "url": "https://files.pythonhosted.org/packages/c0/d1/4eae82f3b3c42ba98e7a05ff401a287f327480cca799eaf1ecf242404a46/pressenter2exit-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "0736f64b41d5c51d3bf842e034eac41b", "sha256": "15a4ee7c4b02ca1b6015598354396a4fe2d8ab407c775f252c70684e65c4b4bd" }, "downloads": -1, "filename": "pressenter2exit-0.0.7.tar.gz", "has_sig": false, "md5_digest": "0736f64b41d5c51d3bf842e034eac41b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2813, "upload_time": "2017-10-01T02:54:40", "url": "https://files.pythonhosted.org/packages/77/84/9901ee9d30936dcb2142fe3838d7895df465276e243fdc64134c597e8058/pressenter2exit-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "69cc38ab91ecfcf6cfbf87e04be61052", "sha256": "53409d7ac98f1cdde87a8e61e93c1c3e42133c5cc4bc47aef172afa86de64d45" }, "downloads": -1, "filename": "pressenter2exit-0.0.8.tar.gz", "has_sig": false, "md5_digest": "69cc38ab91ecfcf6cfbf87e04be61052", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3158, "upload_time": "2017-10-01T05:54:28", "url": "https://files.pythonhosted.org/packages/7d/8e/c1af6b7cde25fbc2e60573f025d4938a858e6945a6b5e5327c53fb9a8f14/pressenter2exit-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "5d017637c334c1cd79e2a2a2fcb8b022", "sha256": "e1f1215737567b7c27b424a0e1e1d7a77d968522fc0679087949d10905a5f3c4" }, "downloads": -1, "filename": "pressenter2exit-0.0.9.tar.gz", "has_sig": false, "md5_digest": "5d017637c334c1cd79e2a2a2fcb8b022", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3026, "upload_time": "2017-10-01T06:21:43", "url": "https://files.pythonhosted.org/packages/78/74/06f93149e27f5cf088e1ac28cf5ab348469c7f9f49afa8a0e5ab1c38a9af/pressenter2exit-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "1b5f641959f1b4730c7a8e1515129072", "sha256": "518ca8479076ea66bf2dc32a191da6c9323423ee6774762ed39ff80bf2191dd2" }, "downloads": -1, "filename": "pressenter2exit-0.1.0.tar.gz", "has_sig": false, "md5_digest": "1b5f641959f1b4730c7a8e1515129072", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3220, "upload_time": "2018-11-27T01:06:14", "url": "https://files.pythonhosted.org/packages/b7/1b/27080070a38a319e69a37d02b3d145eb28b6ebd10c574479d139b4c6bc36/pressenter2exit-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "c43a485a943a8e2fdacddfac606de252", "sha256": "0a9332925b3d8b4cd2f62e0aaa78a12dff61fc2de47e61a983b486d804b1db8b" }, "downloads": -1, "filename": "pressenter2exit-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c43a485a943a8e2fdacddfac606de252", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4033, "upload_time": "2019-03-11T01:11:06", "url": "https://files.pythonhosted.org/packages/22/49/15d1548665ab00177173e007e8e156dc8f7bcdab99b8be49201ee4590a6b/pressenter2exit-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "5dc707f3dbcc40276a46d078ecd9c51f", "sha256": "c2d8d25780023c035dda50cdc00bf69a7e8a308c0e9ab7315cc34070315bf0a2" }, "downloads": -1, "filename": "pressenter2exit-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5dc707f3dbcc40276a46d078ecd9c51f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5859, "upload_time": "2019-06-05T03:39:00", "url": "https://files.pythonhosted.org/packages/d7/ac/73f83e101eb456b9e5fc948720ca759b9b4f8314adc40a748ff106dc983e/pressenter2exit-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f7468ce1e24aa39bb35b9ed6f79d280", "sha256": "13b5be7c9e2320fee3bbead47582835a688eb19b1522544437181112e23e3353" }, "downloads": -1, "filename": "pressenter2exit-0.2.1.tar.gz", "has_sig": false, "md5_digest": "5f7468ce1e24aa39bb35b9ed6f79d280", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3973, "upload_time": "2019-06-05T03:39:02", "url": "https://files.pythonhosted.org/packages/c6/1e/434b45c2a157f64edf01e6902ce107f02a05f6743516e46676c080a3b389/pressenter2exit-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "54ab7de921821c2cca4555787adee38b", "sha256": "20cd6af7ca0e40f4be46e1ef7df7786ecd046bd2fa6881bb058487c973983948" }, "downloads": -1, "filename": "pressenter2exit-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "54ab7de921821c2cca4555787adee38b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5967, "upload_time": "2019-06-05T04:58:22", "url": "https://files.pythonhosted.org/packages/6b/27/5300ad52aa861bc66158497fcc55976c3ac49e9b5fba147248140e31cca3/pressenter2exit-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e5bbe153e74aea18f0e04edec2ce570", "sha256": "ff936deaa1249afad460d6f3b990abd93e5715943ca50c8452f5a2b0e8cbe267" }, "downloads": -1, "filename": "pressenter2exit-0.2.2.tar.gz", "has_sig": false, "md5_digest": "9e5bbe153e74aea18f0e04edec2ce570", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4074, "upload_time": "2019-06-05T04:58:23", "url": "https://files.pythonhosted.org/packages/43/e0/43738429ff686c552d244898adc0f0567a1b1922fbbe4bde5ea52e1f99df/pressenter2exit-0.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "54ab7de921821c2cca4555787adee38b", "sha256": "20cd6af7ca0e40f4be46e1ef7df7786ecd046bd2fa6881bb058487c973983948" }, "downloads": -1, "filename": "pressenter2exit-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "54ab7de921821c2cca4555787adee38b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5967, "upload_time": "2019-06-05T04:58:22", "url": "https://files.pythonhosted.org/packages/6b/27/5300ad52aa861bc66158497fcc55976c3ac49e9b5fba147248140e31cca3/pressenter2exit-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e5bbe153e74aea18f0e04edec2ce570", "sha256": "ff936deaa1249afad460d6f3b990abd93e5715943ca50c8452f5a2b0e8cbe267" }, "downloads": -1, "filename": "pressenter2exit-0.2.2.tar.gz", "has_sig": false, "md5_digest": "9e5bbe153e74aea18f0e04edec2ce570", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4074, "upload_time": "2019-06-05T04:58:23", "url": "https://files.pythonhosted.org/packages/43/e0/43738429ff686c552d244898adc0f0567a1b1922fbbe4bde5ea52e1f99df/pressenter2exit-0.2.2.tar.gz" } ] }