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

特定自动化测试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默认是只读挂载,偶尔会出现权限判断异常的情况。可以尝试卸载后重新挂载:

    1. 先查看磁盘设备路径:
      diskutil list
      
      找到对应挂载盘的设备名(比如/dev/disk2s1)
    2. 卸载磁盘:
      sudo umount /Volumes/label_of_mounted_drive
      
    3. 重新挂载为读写模式:
      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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:24:51