如果您已经尝试过使用 try-except 来捕获异常并进行处理,但仍然无法解决程序崩溃的问题,可能需要进一步排查代码中具体哪一部分引起了程序崩溃的原因。
另外,如果您怀疑是 keyboard 库的等待机制出了问题,可以考虑使用其他库来实现相似的功能。比如 pywin32、pynput 等库也提供了键盘事件监听和模拟按键的接口,建议您可以尝试使用这些库来代替 keyboard 库,看看是否能够解决程序崩溃的问题。
以下是一个使用 pynput 实现按键监听和模拟按键操作的代码示例:
from pynput import keyboard
# 键盘事件回调函数
def on_press(key):
print('按下按键:%s' % key)
def on_release(key):
print('释放按键:%s' % key)
# 如果按下键为 Esc,则停止监听
if key == keyboard.Key.esc:
return False
# 创建一个键盘监听器对象
listener = keyboard.Listener(on_press=on_press, on_release=on_release)
# 启动监听器,开始监听键盘事件
listener.start()
# 模拟按键操作
from pynput.keyboard import Key, Controller
keyboard = Controller()
keyboard.press('a')
keyboard.release('a')
keyboard.press(Key.enter)
keyboard.release(Key.enter)
该示例中,首先创建了一个键盘监听器对象,并通过 start() 方法启动监听器,开始监听键盘事件。
然后通过 pynput.keyboard.Controller 类实例化了一个控制器对象,用于模拟按键操作。在示例中,我们模拟了按下 'a' 键和回车键的操作。
最后,在按下 'Esc' 键时停止监听键盘事件,同时程序将会退出。
以下是您提供的代码改用 pynput 实现的示例:
from pynput import keyboard
import re
import easygui as gui
# 键盘事件回调函数
def on_press(key):
if key == keyboard.Key.f6:
with open('5.txt', 'r') as fin:
data = fin.readlines()
for i in data:
print(i[:9])
q = re.findall('\d+',i[:9])[0]
keyboard.press(q)
keyboard.release(q)
keyboard.press(keyboard.Key.enter)
keyboard.release(keyboard.Key.enter)
time.sleep(1)
gui.msgbox(i)
# 创建一个键盘监听器对象
listener = keyboard.Listener(on_press=on_press)
# 启动监听器,开始监听键盘事件
listener.start()
# 程序主动等待退出
listener.join()
在该示例中,我们同样创建了一个键盘监听器对象,并在 on_press() 回调函数中,添加了与原先相同的相关实现。
需要注意的是,在使用 pynput 库时,需要在回调函数中手动控制按下和释放按键的操作,具体可以通过 keyboard.press() 和 keyboard.release() 方法来实现。
最后,为了保持程序一直监听键盘事件的状态,我们使用了 listener.join() 方法来让程序一直运行,直到接收到按下 'Esc' 键的事件才停止运行。
最后,如果您还有任何疑问或者需要帮助,欢迎随时继续向我提问。