特定自动化测试OSX机器os.listdir抛出OSError异常问题
解决OSX下os.listdir报错但os.path.exists/isdir返回True的问题
我之前在OSX自动化测试机器上碰到过几乎一模一样的问题,结合你的情况,给你几个实操的排查和解决方向:
核实权限与ACL设置
虽然os.path.isdir返回True,但实际目录的访问权限可能藏在ACL(访问控制列表)里。打开终端执行:ls -lde /Volumes/label_of_mounted_drive查看输出里是否有当前用户的读权限条目。如果没有,可以给当前用户添加读权限:
sudo chmod +r /Volumes/label_of_mounted_drive另外要注意:自动化测试进程的运行用户(比如CI工具的专属账户)可能和你终端登录的用户不同,得确认这个进程用户是否有访问该挂载盘的权限。
排查挂载盘的文件系统类型
如果是NTFS格式的磁盘,OSX默认是只读挂载,偶尔会出现权限判断异常的情况。可以尝试卸载后重新挂载:- 先查看磁盘设备路径:
找到对应挂载盘的设备名(比如diskutil list/dev/disk2s1) - 卸载磁盘:
sudo umount /Volumes/label_of_mounted_drive - 重新挂载为读写模式:
sudo mount -t ntfs -o rw,auto,nobrowse /dev/disk2s1 /Volumes/label_of_mounted_drive
挂载完成后再用Python测试
os.listdir是否正常。- 先查看磁盘设备路径:
检查Python运行环境兼容性
如果你用的是虚拟环境或者第三方Python版本,可能存在os模块与OSX系统的兼容性问题。试试切换到系统自带的Python(路径/usr/bin/python)运行测试代码,看是否还会报错。移除可能的隔离扩展属性
OSX有时候会给外部挂载盘加上com.apple.quarantine属性,限制进程访问。可以用以下命令移除这个属性:xattr -d com.apple.quarantine /Volumes/label_of_mounted_drive
从你提供的stat结果来看,目录权限是drwxrwxrwx(对应st_mode=16877,八进制为040777),理论上所有用户都能访问,所以大概率是挂载方式或者进程权限上下文的问题。
内容的提问来源于stack exchange,提问作者Milena
相关产品推荐
相关产品推荐

