Как сделать так, чтобы программа заканчивалась по нажатию клавиши?

if s == "5":
    import time
    sec = 0
    while True:
        print(sec)
        time.sleep(1)
        sec += 1

Ответы (1 шт):

Автор решения: Vladislav Tikhomirov

В целях улучшения базы ruSO привожу перевод ответа, ссылкой на который поделился @Zhihar. Указания на неточности перевода приветствуются.


Это возможно с помощью модуля keyboard. Вы можете установить этот модуль командой pip install keyboard Несколько методов отслеживания нажатия клавиши:


Метод #1:

С помощью функции read_key():

import keyboard

while True:
    if keyboard.read_key() == "p":
        print("You pressed p")
        break

Это остановит выполнение цикла по нажатию клавиши p.


Метод #2:

Используя функцию wait:

import keyboard

keyboard.wait("p")
print("You pressed p")

Программа будет ждать, пока вы не нажмёте p и после нажатия продолжит выполнение.


Метод #3:

Используя функцию on_press_key:

import keyboard

keyboard.on_press_key("p", lambda _:print("You pressed p"))

Это требует функции обратного вызова. Использовано _, потому что функция keyboard возвращает события клавиатуры в эту функцию.

Функция запустится по нажатию клавиши. Вы можете остановить все хуки с помощью:

keyboard.unhook_all()

Метод #4:

Этот метод приводил уже user8167727, но я не согласен с его кодом. Я тоже буду использовать функцию is_pressed, но вот так:

import keyboard

while True:
    if keyboard.is_pressed("p"):
        print("You pressed p")
        break

Это остановит выполнение цикла по нажатию клавиши p.


Метод #5:

Вы можете использовать keyboard.record. Функция записывает все нажатые и отпущенные клавиши, пока вы не нажмёте клавишу escape или одну из тех, которую вы определили в аргументе until, и возвращает элементы списка keyboard.KeyboardEvent.

import keyboard

keyboard.record(until="p")
print("You pressed p")

Примечания:

  • keyboard считывает нажатия во всей ОС.
  • keyboard требует root в linux
→ Ссылка