我不知道这是否正是您正在寻找的内容,但我找到了一个使用pynput的解决方案。
以下实现基本上是它们的reference implementation,并添加了您的循环。
from pynput import keyboard
from time import sleep
exit_flag = False
def on_press(key):
try:
print('alphanumeric key {0} pressed'.format(key.char))
except AttributeError:
print('special key {0} pressed'.format(key))
def on_release(key):
print('{0} released'.format(key))
if key == keyboard.Key.esc:
global exit_flag
exit_flag = True
print("SET EXIT TO {}".format(exit_flag))
return False
with keyboard.Listener(on_press=on_press,
on_release=on_release) as listener:
print("listen...")
while not exit_flag:
print("do something...")
sleep(2)
listener.join()
与全球出口条件下的解决方法是不干净的解决方案,但它确实它的工作。
编辑:
我意识到,要在睡眠中实际出口,这也是不可能的建议的执行情况。但是,它会是一个捕获键盘中断并执行sys.exit()的选项吗?将是一个相当简单的解决方案。
import time
import sys
while True:
try:
print("do something")
time.sleep(10)
except KeyboardInterrupt:
print("to be able to exit script gracefully")
sys.exit()
谢谢,生病必须在你的第一个解决方案看,但如果我理解正确的话,它不会赶上键盘按在脚本睡觉。 第二个看起来像用户必须抓住脚本,而不睡觉。 – Scalextrix
准确地说,第一个将完成睡眠()并在之后退出。第二个会随时捕捉CTRL + Z(工作和睡眠)。你是否以一种方式去打断睡眠? – conFusl
好的,谢谢,第二个是我想要的 – Scalextrix