Ubuntu下Python访问磁盘未先图形打开触发FileNotFoundError问题
核心原因
Ubuntu 桌面版默认采用 udisks2 服务管理额外磁盘的挂载逻辑:非系统预装的本地数据盘、外接移动盘默认不会在开机时自动挂载,只有当你通过文件管理器(Nautilus)点击对应磁盘条目时,udisks2 才会临时将磁盘挂载到 /media/{username}/{磁盘名} 路径下。
你未通过图形界面访问磁盘前,/media/hackytech/Local Disk1 路径根本不存在,因此 Python 调用 os.listdir() 会抛出 FileNotFoundError,和 Python 本身没有关系,属于系统挂载逻辑的问题。
验证方式
开机后未访问磁盘前,在终端执行 ls /media/hackytech/,可以看到目录下没有 Local Disk1 文件夹;图形化访问磁盘后再次执行上述命令,就能看到对应目录,此时Python调用自然正常。
解决方案
- 方案1:配置开机自动挂载(永久生效,推荐)
- 执行
sudo blkid命令,找到你要挂载的Local Disk1对应的 UUID 以及文件系统类型(一般是 NTFS、ext4 等) - 执行
sudo nano /etc/fstab编辑挂载配置文件,在末尾新增一行:
如果是 NTFS 格式:UUID=你的磁盘UUID /media/hackytech/Local\040Disk1 ntfs defaults,uid=1000,gid=1000,umask=0022 0 0
如果是 ext4 格式:UUID=你的磁盘UUID /media/hackytech/Local\040Disk1 ext4 defaults 0 2
注意路径中的空格需要用\040代替,uid和gid替换为你自己的用户id和组id,执行id命令即可查看 - 执行
sudo mkdir -p /media/hackytech/Local\040Disk1提前创建挂载目录,再执行sudo mount -a验证配置是否正确,没有报错即配置生效,后续开机都会自动挂载该磁盘。
- 执行
- 方案2:命令行手动触发挂载(无需图形界面,适合临时使用)
执行sudo blkid拿到磁盘对应的设备路径(比如/dev/sda2),执行udisksctl mount -b /dev/sdaX(sdaX替换为实际设备名)即可完成挂载,效果和图形化点击访问一致。 - 方案3:临时使用无需修改配置,每次开机后先通过文件管理器点击一次对应磁盘即可。
内容的提问来源于stack exchange,提问作者Tanmay Chavan
相关产品推荐
相关产品推荐

