Processing a key pressed in Python 3.6
Virgil Stokes
vs at it.uu.se
Tue Jan 23 18:29:31 EST 2018
Another follow-up question:
How would this code be modified to handle using the "Esc" key instead of
the "Enter" key?
On 2018-01-23 20:15, Chris Angelico wrote:
> On Wed, Jan 24, 2018 at 5:50 AM, Virgil Stokes <vs at it.uu.se> wrote:
>> I would appreciate help on finding a solution to following problem. This is
>> the general structure of the "problem" code:
>>
>>> while True
>>> # Get some data from the web and process it
>>> ...
>>> ...
>>> # Write these data to a file
>>> ...
>>> ...
>>> # Check if a_key has been pressed in the command window
>>> ...
>>> ...
>>> if a_key_pressed:
>>> # Perform some pre-termination tasks
>>> ...
>>> ...
>>> # Close the output data file
>>> ...
>>> ...
>>> raise SystemExit('Exit')
>>
>> I am running the code with Python 3.6 on a windows 10 platform. I have tried
>> many approaches (mainly those posted on stackoverflow) but I have yet to
>> find an approach that works for this structure.
>>
>> Note:
>> 1) The code is executed in the windows 10 command window
>> 2) I am not using wxPython, IDLE, or pyGame in this application.
>> 3) The time to get the data, process it and write it to a file can
>> take from 0.5 sec to 1.5 sec
>> 4) The key hit need not be echoed to the command window
>>
> Are you okay with demanding a specific key, rather than simply "press
> any key"? Even better, key combination? Handle Ctrl-C by catching
> KeyboardInterrupt and you can take advantage of Python's existing
> cross-platform handling of the standard interrupt signal.
>
> If Ctrl-C won't work for you, how about stipulating that it be Enter?
> "Press Enter to quit" isn't too much worse than "Press any key to
> quit" (plus you have less chance of accidentally terminating the
> program when you don't want to). Spin off a thread to wait for enter.
> I've tested this only on Linux, but it ought to work:
>
> import threading
> import time
>
> shutdown = False
> def wait_for_enter():
> print("Hit Enter to quit.")
> input()
> global shutdown; shutdown = True
>
> threading.Thread(target=wait_for_enter).start()
>
> while "more work to do":
> print("Getting data...")
> time.sleep(1)
> print("Saving data to file...")
> time.sleep(1)
> if shutdown:
> print("Pre-termination...")
> time.sleep(1)
> raise SystemExit("exit")
>
> If it doesn't, try switching around which is the secondary thread and
> which is the primary - spin off a thread to do the work, then call
> input() in the main thread.
>
> ChrisA
More information about the Python-list
mailing list