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

MacOS 15.1.1下pynput键盘监听器权限不足问题求助

MacOS 15.1.1下pynput键盘监听器权限不足问题求助

问题描述

我正在为大学作业运行这段代码,但一直解决不了监听器的权限问题。我已经试过下载PyCharm,把PyCharm、VSCode和终端都添加到了系统的辅助功能设置里,也尝试过以root权限运行,但都没用。有没有人遇到过同样的问题?

我的系统是:MacOS 15.1.1 (24B91)

相关代码

import pynput
import time

def _flush_input():
    try:
        import msvcrt
        while msvcrt.kbhit():
            msvcrt.getch()
    except ImportError:
        import sys, termios
        termios.tcflush(sys.stdin, termios.TCIOFLUSH)

def get_pressed_keys(keys_filter=None):
    """
    Returns a list of all pressed keys at the time of the call.
    
    Parameters:
    keys_filter (list[str]): A list of specific keys to check. If omitted, every key is checked.
    
    Returns:
    list[str]: A list of currently pressed keys.
    """
    keys_lst = []
    
    def on_press(key):
        try:
            if key.char not in keys_lst:
                keys_lst.append(key.char)
        except AttributeError:
            if key not in keys_lst:
                keys_lst.append(str(key))

    # Initialize the listener
    listener = pynput.keyboard.Listener(on_press=on_press)

    # Check if listener has the IS_TRUSTED attribute and if it's True
    if hasattr(listener, 'IS_TRUSTED') and listener.IS_TRUSTED:
        print("Listener is trusted and has the necessary permissions!")
    else:
        print("Listener does not have the necessary permissions.")
        return []

    # Start the listener to capture key presses
    listener.start()
    time.sleep(0.5)  # Give it time to register key presses
    listener.stop()

    # Flush any leftover input
    _flush_input()

    # Return the filtered keys (if any filter is passed)
    if keys_filter is None:
        return keys_lst
    else:
        return [k for k in keys_filter if k in keys_lst]

def clear_print(*args, **kwargs):
    """
    Clears the terminal before calling print()
    """
    print("\033[H\033[J", end="")
    print(*args, **kwargs)

可能的解决思路

我之前帮朋友排查过MacOS下pynput的权限问题,给你几个可以尝试的方向:

  • 彻底重启相关应用和系统
    有时候添加权限后,应用没有真正读取到更新的设置,完全退出PyCharm/VSCode/终端,甚至重启电脑再试,这个小细节经常被忽略但很有效。

  • 检查权限的完整性
    去系统设置 > 隐私与安全性,除了辅助功能,还要检查输入监控权限——MacOS 10.14+之后,监听键盘输入同时需要这两个权限,把你的开发工具和终端都加进去并勾选。另外要确认添加的是你正在使用的应用版本(比如PyCharm如果是官网下载的,和App Store版本路径不同,要对应上)。

  • 用终端直接运行脚本,绕过IDE
    有时候IDE的权限继承有问题,你可以试试:打开终端,cd到脚本所在文件夹,用python3 your_script.py或者sudo python3 your_script.py运行(如果用sudo,要确保终端已经在权限列表里)。

  • 更新pynput到最新版本
    旧版本的pynput可能对新的MacOS版本(比如15.1.1)支持不好,运行pip install --upgrade pynput更新到最新版,说不定权限检测逻辑已经修复了。

  • 临时关闭系统完整性保护(SIP)(最后手段)
    这个不推荐日常使用,但如果作业紧急可以临时测试:重启电脑按住Command+R进入恢复模式,打开终端输入csrutil disable,重启后再运行脚本,测试完记得再打开SIP(同样进入恢复模式执行csrutil enable)。


备注:内容来源于stack exchange,提问作者amit omer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:08:07