os.listdir引发OSError,但路径存在并被核心传递给python

时间:2018-04-17 16:22:51

标签: python macos matplotlib operating-system listdir

我在一台用于自动测试的特定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)

驱动器已安装,可见并可用于取景器。我可以通过终端列出它。我甚至可以通过单独的python进程列出它(例如调用subprocess和'python',' - c','import os; print os.listdir(“the_path_here”)')

更有趣的部分是它在2天前工作,现在它停止了*。

另外 - 在终端中运行python - listdir在这个特定的路径上运行,通过nosetests / unittests运行测试 - listdir被破坏了。

现在这不是第一次在这台特定的机器上发生这种情况。上次我刚刚重新安装整个系统并修复了它。 现在 - 我打算做同样的事情 - 但是在这一点上我只是非常好奇是什么导致了这一点。

有什么想法吗?

*我从virtualenv切换到pyenv-virtualenv后停止工作。但经过一段时间和许多其他尝试后,我卸载了所有brew包并自行酿造,创建了新的用户,删除了旧用户,从头开始在新用户上安装brew和python,然后回到简单的virtualenv,一切都没有成功: (

机器设置为:

  • Sierra 10.12.6
  • 冲泡
  • 蟒@ 2
  • xcode 9.2
  • 一些已安装的库是:
    • brew:zlib,libjpeg
    • python:matplotlib,Pillow,lxml,pyobjc

2 个答案:

答案 0 :(得分:0)

我已经对此做了一些研究,看起来这些都是尝试的事情:

  1. 如果您尝试展开/Volumes/label_of_mounted_drive,我相信您应该os.listdir(os.path.expanduser('/Volumes/label_of_mounted_drive'))
  2. 如果您还没有,请使用完整路径。 (用户/ YOURUSERNAME /不管)
  3. 如果其他所有方法都失败了,请尝试os.chdir()
  4. 我希望这有用。

答案 1 :(得分:0)

原来,导入matplotlib打破了这个(测试在virtualenv上运行)。为什么 - 我不知道。 我在运行测试后将绘图移动到了,并且我在方法中导入了matplotlib。