Python >> Python-zelfstudie >  >> Python

Hoe maak je een while-lus af met een toetsaanslag?

De gemakkelijkste manier is om het gewoon te onderbreken met de gebruikelijke Ctrl-C (SIGINT).

try:
    while True:
        do_something()
except KeyboardInterrupt:
    pass

Sinds Ctrl-C veroorzaakt KeyboardInterrupt te verhogen, vang het gewoon buiten de lus en negeer het.


Er is een oplossing die geen niet-standaard modules vereist en 100% transporteerbaar is

import thread

def input_thread(a_list):
    raw_input()
    a_list.append(True)

def do_stuff():
    a_list = []
    thread.start_new_thread(input_thread, (a_list,))
    while not a_list:
        stuff()

de volgende code werkt voor mij. Het vereist openCV (import cv2).

De code bestaat uit een oneindige lus die continu zoekt naar een ingedrukte toets. In dit geval eindigt het programma wanneer de 'q'-toets wordt ingedrukt. Er kunnen andere toetsen worden ingedrukt (in dit voorbeeld 'b' of 'k') om verschillende acties uit te voeren, zoals het wijzigen van een variabelewaarde of het uitvoeren van een functie.

import cv2

while True:
    k = cv2.waitKey(1) & 0xFF
    # press 'q' to exit
    if k == ord('q'):
        break
    elif k == ord('b'):
        # change a variable / do something ...
    elif k == ord('k'):
        # change a variable / do something ...