如何替换另一个键的“KeyboardInterrupt”命令?

问题描述

我有以下代码

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-')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...