You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下Python 3.7.3同时运行pynput与tkinter报Illegal Instruction 4错误原因

错误触发核心原因

该错误为macOS Catalina 10.15.x版本特有的框架冲突问题,触发逻辑如下:

  • macOS底层的Cocoa GUI框架强制要求所有tkinter相关操作必须运行在进程主线程,且独占主线程事件循环调度权
  • pynput的键盘监听器在macOS上基于Quartz事件服务实现,启动时会向系统注册全局输入事件回调,默认会抢占主线程事件资源
  • Catalina版本的安全校验机制对同时申请GUI渲染权限和全局输入监听权限的进程处理逻辑存在缺陷,两个模块同时抢占主线程资源时,系统框架层会返回未定义执行指令,最终抛出Illegal Instruction: 4错误
现象验证

你遇到的单独运行两个库无异常、同时运行才报错的情况完全匹配上述触发逻辑:

  • 单独运行pynput时无Cocoa事件循环抢占主线程,监听器可正常接管事件调度
  • 单独运行tkinter时未申请全局输入监听权限,不会触发系统安全校验
  • zsh与bash的报错差异仅为不同shell对硬件错误的输出格式不同,与错误本身无关
修复方案

调整代码执行顺序,先初始化tkinter占住主线程Cocoa上下文,再以非阻塞方式启动pynput监听器即可解决:

import tkinter as tk
from pynput.keyboard import Listener

def on_press(key):
    pass

# 先初始化tk,抢占主线程上下文
root = tk.Tk()
# 非阻塞启动监听器,不占用主线程
listener = Listener(on_press=on_press)
listener.start()

root.mainloop()
# 窗口关闭后清理监听器资源
listener.stop()
listener.join()

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:36:04