mac终端或python脚本报oserror[errno 1]operation not permitted,主因是macos catalina起强制启用的“完全磁盘访问权限”未授权,须在「系统设置→隐私与安全性→完全磁盘访问权限」中手动添加terminal.app(或iterm2等)并重启终端,必要时还需为python3可执行文件单独授权。

Mac系统从macOS Catalina开始强制启用“完全磁盘访问权限”(Full Disk Access),Python脚本或终端执行时若尝试读写桌面、文档、下载等受保护目录,会直接报错 OSError: [Errno 1] Operation not permitted,即使文件权限正确、路径无误也无法绕过——必须手动授权。
确认当前终端是否已有完全磁盘访问权限
打开“系统设置” → “隐私与安全性” → 左侧滚动到底部点击“完全磁盘访问权限”。右侧列表中查找“终端”(Terminal.app)或你实际使用的终端应用(如“iTerm2”“Alacritty”“WezTerm”)。如果名字旁没有勾选,说明尚未授权,后续所有Python脚本对受保护位置的读写操作都会被拦截。
为终端添加完全磁盘访问权限
方法一:拖拽添加(推荐,最稳妥)
在“完全磁盘访问权限”列表空白处,直接将终端应用程序图标从Finder中拖入。例如:前往“应用程序 → 实用工具 → 终端”,按住不放拖进列表区松手。系统会立即弹出确认对话框,点击“添加”即可生效。
方法二:点击+号后手动选取
点击列表下方的“+”按钮 → 在弹出窗口中按下 Command + Shift + G → 输入 /Applications/Utilities/Terminal.app → 点击“前往” → 选中 Terminal.app → 点击“打开”。注意:不能选中别名或快捷方式,必须是原始.app包本体。
【关键提醒】 如果你使用的是非系统自带终端(如iTerm2),必须把它的.app文件拖进去,而不是终端里正在运行的进程窗口;拖完后需重启该终端应用才能生效。
为Python命令行工具单独授权(可选但常被忽略)
第一步:确认Python解释器路径
在终端中运行:which python3,典型输出为 /opt/homebrew/bin/python3 或 /usr/local/bin/python3。记下这个完整路径。
第二步:将Python可执行文件加入权限列表
回到“完全磁盘访问权限”界面,点击“+” → Command + Shift + G → 粘贴上一步查到的路径(不含文件名)→ 点击“前往” → 进入该目录 → 选中 python3 文件 → 点击“打开”。
这一步不是必须的,但能避免某些场景下(比如用 python3 script.py 直接调用且脚本内含 os.listdir("~/Documents"))仍被拦截。授权后无需重启Python,下次运行即生效。
验证权限是否生效
在终端中运行以下命令:python3 -c "import os; print(os.listdir('~/Desktop'))"
如果成功打印出桌面文件列表,说明权限已就位;若仍报 OSError: [Errno 1],请检查是否重启了终端、是否拖错了应用、是否点错了“完全磁盘访问权限”下的其他权限类别(如“文件和文件夹”或“自动化”不顶用,必须是“完全磁盘访问权限”)。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











