问题描述
while True:
try:
#DoSomething
except KeyboardInterrupt:
break
但我想输入另一个键来结束循环,而不是使用 Crtl + C。我该怎么做?
解决方法
您可以使用 keyboard
模块:
import keyboard
while True:
if keyboard.is_pressed("some key"):
break
do_something()
这将继续执行某些操作,直到按下 some key
。然后,它会跳出无限循环。
要捕捉热键,请使用 add_hotkey
函数:
import keyboard
def handle_keypress(key):
global running
running = False
print(key + " was pressed!")
running = True
keyboard.add_hotkey("ctrl+e",lambda: handle_keypress("Ctrl-E"))
while running:
do_something()
或者您可以使用pynput
:
from pynput.keyboard import Listener
def on_press(key):
print('{0} pressed'.format(
key))
with Listener(
on_press=on_press) as listener:
listener.join()
,
这是使用我在第二条评论中提到的 keyboard
模块的简单示例。它处理我在第一条评论中提到的大部分步骤,并在多个平台上工作。当用户按下 Ctrl + B 键时,循环将停止。
请注意,Ctrl + C 仍会引发 KeyboardInterrupt
。
import keyboard
from time import sleep
def callback(keyname):
global stopped
print(f'{keyname} was pressed!')
stopped = True
keyboard.add_hotkey('ctrl+b',lambda: callback('Ctrl-B'))
stopped = False
print('Doing something...')
while not stopped:
sleep(1) # Something
print('-fini-')