os.listdir 引发 OSError,但路径存在并正确传递给 python
os.listdir raises OSError, but path exists and is corectly passed to python
我在一台用于自动测试的特定 OSX 机器上遇到问题,os.listdir 引发 OSError。
有趣的是:
os.path.exists("/Volumes/label_of_mounted_drive") -> True
os.path.isdir("/Volumes/label_of_mounted_drive") -> True
但是
os.listdir("/Volumes/label_of_mounted_drive") -> OSError ([Errno 2] No such file or directory)
路径的统计数据是
posix.stat_result(st_mode=16877, st_ino=1, st_dev=939524119, st_nlink=2, st_uid=502, st_gid=20, st_size=68, st_atime=1523980718, st_mtime=1523980718, st_ctime=1523980718)
驱动器已安装,在 finder 中可见且可用。我可以通过终端列出它。我什至可以通过单独的 python 进程列出它(例如调用子进程和 'python'、'-c'、'import os; print os.listdir("the_path_here")')
更有趣的是,它在 2 天前还在工作,现在停止了*。
此外 - 运行 python 在终端中 - listdir 在这个特定路径上工作,运行 通过 nosetests / unittests 测试 - listdir 已损坏。
现在这不是这台特定机器上第一次发生这种情况。上次我只是重新安装了整个系统并修复了它。
现在 - 我打算做同样的事情 - 但此时 我非常好奇是什么原因造成的。
有什么想法吗?
*我从 virtualenv 切换到 pyenv-virtualenv 后它停止工作了。但是经过一段时间和许多其他尝试后,我卸载了所有 brew 软件包并 brew 本身,创建了新的新用户,删除了旧用户,从头开始在新用户上安装了 brew 和 python,然后回到了简单的 virtualenv,所有没有成功:(
机器设置为:
- 塞拉利昂 10.12.6
- 酿造
- python@2
- xcode 9.2
- 一些已安装的库是:
- 酿造:zlib、libjpeg
- python:matplotlib、枕头、lxml、pyobjc
我对此做了一些研究,看起来这些是可以尝试的事情:
- 如果您要扩展
/Volumes/label_of_mounted_drive
,那么我认为您应该 os.listdir(os.path.expanduser('/Volumes/label_of_mounted_drive'))
。
- 如果您还没有,请使用完整路径。 (Users/YOURUSERNAME/whatever)
- 如果一切都失败了,请尝试
os.chdir()
。
希望对您有所帮助。
事实证明,导入 matplotlib 破坏了这个(在 virtualenv 上测试运行)。为什么-我不知道。
我将绘图移至测试后 运行,并且我在方法中导入了 matplotlib。
我在一台用于自动测试的特定 OSX 机器上遇到问题,os.listdir 引发 OSError。
有趣的是:
os.path.exists("/Volumes/label_of_mounted_drive") -> True
os.path.isdir("/Volumes/label_of_mounted_drive") -> True
但是
os.listdir("/Volumes/label_of_mounted_drive") -> OSError ([Errno 2] No such file or directory)
路径的统计数据是
posix.stat_result(st_mode=16877, st_ino=1, st_dev=939524119, st_nlink=2, st_uid=502, st_gid=20, st_size=68, st_atime=1523980718, st_mtime=1523980718, st_ctime=1523980718)
驱动器已安装,在 finder 中可见且可用。我可以通过终端列出它。我什至可以通过单独的 python 进程列出它(例如调用子进程和 'python'、'-c'、'import os; print os.listdir("the_path_here")')
更有趣的是,它在 2 天前还在工作,现在停止了*。
此外 - 运行 python 在终端中 - listdir 在这个特定路径上工作,运行 通过 nosetests / unittests 测试 - listdir 已损坏。
现在这不是这台特定机器上第一次发生这种情况。上次我只是重新安装了整个系统并修复了它。 现在 - 我打算做同样的事情 - 但此时 我非常好奇是什么原因造成的。
有什么想法吗?
*我从 virtualenv 切换到 pyenv-virtualenv 后它停止工作了。但是经过一段时间和许多其他尝试后,我卸载了所有 brew 软件包并 brew 本身,创建了新的新用户,删除了旧用户,从头开始在新用户上安装了 brew 和 python,然后回到了简单的 virtualenv,所有没有成功:(
机器设置为:
- 塞拉利昂 10.12.6
- 酿造
- python@2
- xcode 9.2
- 一些已安装的库是:
- 酿造:zlib、libjpeg
- python:matplotlib、枕头、lxml、pyobjc
我对此做了一些研究,看起来这些是可以尝试的事情:
- 如果您要扩展
/Volumes/label_of_mounted_drive
,那么我认为您应该os.listdir(os.path.expanduser('/Volumes/label_of_mounted_drive'))
。 - 如果您还没有,请使用完整路径。 (Users/YOURUSERNAME/whatever)
- 如果一切都失败了,请尝试
os.chdir()
。
希望对您有所帮助。
事实证明,导入 matplotlib 破坏了这个(在 virtualenv 上测试运行)。为什么-我不知道。 我将绘图移至测试后 运行,并且我在方法中导入了 matplotlib。