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

MacOS下sudo运行Python文件报zsh segmentation fault求助

运行环境
  • 系统:MacOS Monterey(无可用系统更新)
  • Python版本:3.10.4
问题描述

通过绝对路径加sudo提权运行Python脚本mainCode.py时触发段错误,执行命令为:
sudo python3 '/Users/cyberstorm/Documents/Visual Studio Code/Terminal Adventure/mainCode.py'
终端返回报错:zsh: segmentation fault sudo python3,无法直接定位错误原因。

复现背景

脚本依赖keyboard模块实现键盘输入监听,代码逻辑确认无问题:

  • 首次以普通用户权限运行时,抛出权限不足错误,日志如下:
Exception in thread Thread-1 (listen):
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/threading.py", line 946, in run
    self._target(*self._args, **self._kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/keyboard/__init__.py", line 294, in listen
    _os_keyboard.listen(self.direct_callback)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/keyboard/_darwinkeyboard.py", line 430, in listen
    raise OSError("Error 13 - Must be run as administrator")
OSError: Error 13 - Must be run as administrator
  • 根据报错提示改用sudo提权运行,在脚本所在目录执行sudo python3 mainCode.py时提示文件不存在,切换为脚本绝对路径执行后触发前述段错误。
解决方案

这个段错误和代码逻辑无关,是MacOS权限机制、sudo环境变量差异、keyboard模块Mac端实现缺陷共同导致的,按以下步骤操作即可修复:

  • 指定正确的Python解释器全路径
    sudo执行时会重置环境变量PATH,直接写python3大概率会调用系统自带的Python解释器,该解释器既没有安装keyboard模块,还存在版本兼容问题。先在普通用户权限的终端执行which python3,获取当前用户使用的Python解释器完整路径(通常为/Library/Frameworks/Python.framework/Versions/3.10/bin/python3),sudo运行时直接写全该路径,示例命令:
    sudo /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 '/Users/cyberstorm/Documents/Visual Studio Code/Terminal Adventure/mainCode.py'
  • 给终端开放对应系统权限
    打开「系统设置→隐私与安全性」,分别找到「辅助功能」「完全磁盘访问权限」两个配置项,将你当前使用的终端(系统Terminal、iTerm2、VS Code内置终端均可)加入允许列表并勾选。配置完成后必须完全退出终端重新打开,权限配置才会生效。
  • 降级安装兼容版本的keyboard模块
    如果前两步操作后仍触发段错误,说明当前安装的最新版keyboard模块在Monterey系统上存在内存访问bug,提权调用底层输入监听接口时会触发越界。执行以下命令重装稳定兼容版本:
    pip3 uninstall keyboard -y
    pip3 install keyboard==0.13.5
    
    重装完成后再使用带Python全路径的sudo命令运行即可。

补充说明:之前在脚本目录执行sudo python3 mainCode.py提示文件不存在,也是sudo重置环境变量和工作目录导致的,使用脚本绝对路径的写法本身没有问题,只要Python解释器路径正确就不会出现找不到文件的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:33:19