0

I am writing a python script that has an infinite loop and for me to stop I use the usual Keyboard Interrupt key Ctrl+c but I was wondering if I can set one of my own like by pressing space once the program can stop I want it to have the same function as Ctrl+c So if it is possible how can I assign it?

SAM Acc
  • 38
  • 8
  • Well, this is more a question of setting up your terminal/IDE/whatever. Some might have the functionality to rebind keys. – KTibow Dec 28 '21 at 15:49
  • See here is my problem I want to be set within the script so whoever has access to the code will press the same universal button to sop the code – SAM Acc Dec 28 '21 at 15:51
  • There are many ways you could go about this: 1. Set up your terminal/IDE (I might be able to help) 2. Create a global keybind (I can recommend a library and how to use it) 3. Look at STDIN in a thread (No clue how you would do this) – KTibow Dec 28 '21 at 15:54
  • By that you mean create like a hotkey for the task – SAM Acc Dec 28 '21 at 15:55
  • Which one are you talking about? – KTibow Dec 28 '21 at 15:56
  • By creating a global key bind – SAM Acc Dec 28 '21 at 15:58
  • Let us [continue this discussion in chat](https://chat.stackoverflow.com/rooms/240502/discussion-between-ktibow-and-sam-acc). – KTibow Dec 28 '21 at 15:58

3 Answers3

0

You can add a listener to check when your keys are pressed and then stop your script

from pynput.keyboard import Listener

def on_press(key):
    # check that it is the key you want and exit your script for example

with Listener(on_press=on_press) as listener:
    listener.join()

# do your stuff here
while True:
    pass
Jimmy Fraiture
  • 370
  • 1
  • 2
  • 15
0

For creating the keyboard listener (Based on Jimmy Fraiture's answer and comments), and on Space stop the script using exit() (Suggested here)

from pynput.keyboard import Listener

def on_press(key):
    # If Space was pressed (not pressed and released), stop the execution altogether 
    if (key == Key.space):
        print('Stopping...')
        exit()

with Listener(on_press=on_press) as listener:
    listener.join()


while True:
    print('Just doing my own thing...\n')
Chrimle
  • 490
  • 1
  • 4
  • 10
  • thank you I will try this now and keep you posteed – SAM Acc Jan 02 '22 at 16:46
  • that did not work – SAM Acc Jan 02 '22 at 16:52
  • As suggested [here](https://stackoverflow.com/questions/67875573/exit-loop-with-pynput-input), you will have to create another thread to be responsible for the listener. But that makes me think you will have to use some of the other "stop"-commands I linked in my answer, because now you not only want to kill the listener, but _also_ the thread doing your while-loop. – Chrimle Jan 02 '22 at 16:59
0
from pynput.keyboard import Listener
     while True:
         if keyboard.is_pressed("space"):
             exit()
SAM Acc
  • 38
  • 8