Закрытие/завершение кода в случае, когда пользователь нажал на определённое сочетание клавиш на клавиатуре

Рейтинг: 0Ответов: 1Опубликовано: 08.06.2023

Мой вопрос заключается в том, каким образом можно закрыть код в данном случае, если пользователь нажал на сочетание клавиш "ctrl + c"?

Код:

import socket
import keyboard


server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = "127.0.0.1"

port = 8080

server.bind((host, port))
server.listen(5)

print("\n[*] The server successfully created")

while not keyboard.is_pressed("ctrl + c"):
    client, address = server.accept()
    if client:
        print("\n[*] Client with host"
              f"{address[0]} and port:"
              f"{address[1]} connected")

В данном случае даже если я нажимаю на "ctrl + c", код все равно не закрывается, хотя должен. Если есть возможность, прошу предоставить варианты кода, как можно реализовать такую идею. Буду благодарен за любую помощь.

Ответы

▲ 0Принят

Проверка keyboard.is_pressed("ctrl + c") в данном случае не делает абсолютно ничего, поскольку большую часть времени поток висит на ожидании accept или делает другую полезную работу. Это условие можно попросту выкинуть:

while True:
    client, address = server.accept()
    if client:
        print("\n[*] Client with host"
              f"{address[0]} and port:"
              f"{address[1]} connected")

Я только что проверил - на линуксе этот код успешно останавливается по Ctrl+C без дополнительных усилий.

Если он у вас не останавливается - значит, вы либо запускаете неинтерактивную задачу в фоновом режиме, либо у вас сломана ось, либо у вас винда.

На Windows комбинация клавиш Ctrl+C традиционно означает не остановку программы, а копирование в буфер обмена, и с недавнего времени консоль тоже следует этому соглашению. Попробуйте переключиться на более старую версию консоли, или же воспользуйтесь комбинацией Ctrl+Break. Также закрытие консольного окна тоже должно приводить к остановке программы.