Pressing ^C in a Python program. Also Progress Bar.
If you want to stop a user interrupt via ^C aborting your program, you can catch a
KeyboardInterrupt in Python. There's an example
[here] which I wrote earlier today. It also shows how important it might be to use two try/except blocks rather than one - I've specified two
inputs in the same block and, very irritatingly (and to make a point!) an entry of ^C to the second question knocks you back to the first question again for re-answering.
Once you disable ^C, you need to find some way of killing your process should an emergency need arise. Running on Unix / Linux systems from a command line, you can use ^Z to suspend the process and the use
kill %!. You could also report the process number (via
getpid (sample call
[here]) to a .pid file, or to the user ...
... and another way to allow ^C to work in some circumstances is to look for it being pressed twice within a very short time - "double click"ed. There's a further example showing that
[here]. That example also shows a progress bar in Python. Note ...
• use of \r rather than \n to send the cursor back but remain on the same line
• use of flush to ensure that output isn't buffered
• use of formatted fixed width output to ensure that each new report fully replaced previous one and doesn't leave spurious characters hen a short line replaces a longer one.
(written 2011-09-15, updated 2011-09-16)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y212 - Python - Code testing, patterns, profiles and optimisation. [235] Preparation for a day's work - (2005-03-04)
[1140] Python GTK - Widget, Packing, Event and Feedback example - (2007-04-09)
[1146] __new__ v __init__ - python constructor alternatives? - (2007-04-14)
[1148] Python decorators - wrapping a method call in extra code - (2007-04-15)
[1555] Advanced Python, Perl, PHP and Tcl training courses / classes - (2008-02-25)
[2123] Using Python with OpenOffice - (2009-04-09)
[2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3464] Passing optional and named parameters to python methods - (2011-10-04)
[3478] Testing your Python classes with the unittest package - how to - (2011-10-14)
[3658] Using Make for a distribution - (2012-03-17)
[4090] Test Driven Development in Python - Customer Comes First - (2013-05-16)
[4326] Learning to program - comments, documentation and test code - (2014-11-22)
[4344] Python base and inherited classes, test harness and unit testing - new examples - (2014-12-07)
[4446] Combining tests into suites, and suites into bigger suites - Python and unittest - (2015-03-01)
[4470] Testing in Python 3 - unittest, doctest and __name__ == __main__ too. - (2015-04-21)
[4538] Flask and unittest - hello web app test world - (2015-10-15)
[4540] Unittest of a Flask application including forms - (2015-10-15)
[4542] The principle of mocking - and the Python Mock package - (2015-10-17)
[4617] Pytest - starting example - (2016-01-07)
[4618] Pytest - second example beyond hello world - (2016-01-08)
[4716] Profiling your Python program - (2016-11-01)
Y109 - Python - Exceptions [381] Exceptions in Python - (2005-07-17)
[1042] Nested exceptions in Python - (2007-01-18)
[1236] Trying things in Python - (2007-06-18)
[2018] UnboundLocalError - Python Message - (2009-01-31)
[2281] Python - using exceptions to set a fallback - (2009-07-12)
[2368] Python - fresh examples of all the fundamentals - (2009-08-20)
[2408] Robust user input (exception handling) example in Python - (2009-09-17)
[2622] Handling unusual and error conditions - exceptions - (2010-02-03)
[2994] Python - some common questions answered in code examples - (2010-10-10)
[2998] Using an exception to initialise a static variable in a Python function / method - (2010-10-13)
[3177] Insurance against any errors - Volcanoes and Python - (2011-02-19)
[3433] Exceptions - a fail-safe way of trapping things that may go wrong - (2011-09-11)
[3664] Error checking in a Python program - making your program robust via exceptions - (2012-03-22)
[3913] How many times ... has this loco headed west through Tenby? - Python exceptions - (2012-11-05)
[3930] Reporting the full stack trace when you catch a Python exception - (2012-11-22)
[4029] Exception, Lambda, Generator, Slice, Dict - examples in one Python program - (2013-03-04)
[4161] Python varables - checking existance, and call by name or by value? - (2013-08-27)
[4444] Elements of an exception in Python - try, except, else, finally - (2015-02-28)
Some other Articles
Perl and CGI - simple form, and monitoring script.Take the dog on a lead - do not carry her. Perl references.Getting more log information from the Apache http web serverPressing ^C in a Python program. Also Progress Bar.Research is exciting. But should routine be automated?Python for loops - applying a temporary second name to the same objectMelksham to become a part of Trowbridge?Light bulbsMoving from scripting to Object Orientation in Python