python 非终止键盘中断
python non-terminating keyboard interrupt
不确定这里的术语。
我有一个定时器循环
flag=False
for second in range(10*60) :
do_something
if flag :
add_trick
flag = False
我想在设置标志的任意点按一个特殊键。
我尝试添加一个关键侦听器。这是我的测试代码。
from pynput import keyboard
flag=False
def on_press(key):
global flag
match str(key) :
case "'s'" :
flag=True
return True
def run_timer():
global flag
flag=False
while True: # for second in range(10*60) :
#sleep(1)
print('a')
if flag :
print('FLAG')
flag = False
if __name__=="__main__" :
listener = keyboard.Listener(on_press=on_press)
listener.start()
#listener.join()
run_timer()
没用。
没有 listener.join()
听众就不会参与。
使用 listener.join()
时,侦听器会阻塞并且循环不会 运行。
回调中的key
参数不是字符串,而是一个pynput.keyboard.Key
对象。因此,您需要将 key.char
与 "s"
.
进行比较,而不是将其与 "s"
进行比较
这是测试代码的清理版本,它将设置标志 3 次,然后清理侦听器线程并退出:
import time
from pynput import keyboard
flag = False
def on_press(key):
global flag
if key.char == "s":
flag = True
return True
def run_timer():
global flag
flag = False
flag_count = 0
while flag_count < 3:
time.sleep(0.1)
if flag :
print('FLAG')
flag = False
flag_count += 1
if __name__=="__main__" :
listener = keyboard.Listener(on_press=on_press)
listener.start()
run_timer()
listener.stop()
listener.join()
print("listener cleaned up")
不确定这里的术语。
我有一个定时器循环
flag=False
for second in range(10*60) :
do_something
if flag :
add_trick
flag = False
我想在设置标志的任意点按一个特殊键。
我尝试添加一个关键侦听器。这是我的测试代码。
from pynput import keyboard
flag=False
def on_press(key):
global flag
match str(key) :
case "'s'" :
flag=True
return True
def run_timer():
global flag
flag=False
while True: # for second in range(10*60) :
#sleep(1)
print('a')
if flag :
print('FLAG')
flag = False
if __name__=="__main__" :
listener = keyboard.Listener(on_press=on_press)
listener.start()
#listener.join()
run_timer()
没用。
没有 listener.join()
听众就不会参与。
使用 listener.join()
时,侦听器会阻塞并且循环不会 运行。
回调中的key
参数不是字符串,而是一个pynput.keyboard.Key
对象。因此,您需要将 key.char
与 "s"
.
"s"
进行比较
这是测试代码的清理版本,它将设置标志 3 次,然后清理侦听器线程并退出:
import time
from pynput import keyboard
flag = False
def on_press(key):
global flag
if key.char == "s":
flag = True
return True
def run_timer():
global flag
flag = False
flag_count = 0
while flag_count < 3:
time.sleep(0.1)
if flag :
print('FLAG')
flag = False
flag_count += 1
if __name__=="__main__" :
listener = keyboard.Listener(on_press=on_press)
listener.start()
run_timer()
listener.stop()
listener.join()
print("listener cleaned up")