Закрытие/завершение кода в случае, когда пользователь нажал на определённое сочетание клавиш на клавиатуре
Мой вопрос заключается в том, каким образом можно закрыть код в данном случае, если пользователь нажал на сочетание клавиш "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", код все равно не закрывается, хотя должен. Если есть возможность, прошу предоставить варианты кода, как можно реализовать такую идею. Буду благодарен за любую помощь.
Ответы (1 шт):
Проверка 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. Также закрытие консольного окна тоже должно приводить к остановке программы.