Я написал этот бесконечный цикл while и хочу остановить его после сочетаний клавиш.
import webbrowser
import time
import random
def visitweb():
global done
done = False
while not done:
sites = ['google.com', 'test.com', 'quora.com', 'anything.com']
sites = random.choice(sites)
visit = f"http://www.{sites}"
webbrowser.open(visit)
seconds = random.randrange(5, 20)
time.sleep(seconds)
Итак, я хочу, чтобы цикл while выполнялся до тех пор, пока на клавиатуре не будет нажата определенная комбинация клавиш, конечно же, за пределами терминала.
Я не хочу использовать ввод, чтобы остановить его или убить скрипт, я знаю, как это сделать, используя msvcrt
.
Я считаю, что это можно сделать с помощью библиотеки pynput
, я уже смог найти способ выполнить задачу после нажатия клавиши, используя pynput.keyboard.Listener
.
Как это:
from pynput import keyboard
combinations = [
{keyboard.Key.shift, keyboard.KeyCode(char='a')},
{keyboard.Key.shift, keyboard.KeyCode(char='A')}
]
current = set()
def execute():
global done
done = True
print(f"this is done")
def on_press(Key):
if any([Key in COMBO for COMBO in combinations]):
current.add(Key)
if any(all(k in current for k in COMBO) for COMBO in combinations):
execute()
def on_release(Key):
if any([Key in COMBO for COMBO in combinations]):
current.remove(Key)
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
Теперь, как я могу заставить эти два сценария работать вместе? Как сделать так, чтобы цикл while
работал в то же время , что и keyboard.Listener
. В настоящее время после нажатия shift + a цикл while
обрывается.
PS: это для учебных целей.