Python 3没有通过stat检测符号链接

时间:2017-07-27 18:28:20

标签: python linux python-3.x ubuntu filesystems

我遇到了一个奇怪的情况,似乎不同的Python模块(osstat vs pathlib)在文件是符号链接时识别不同。

我们以python3二进制文件为例:

paris@pk-tools:~$ ls -la /usr/bin/python3
lrwxrwxrwx 1 root root 9 Mar 23  2016 /usr/bin/python3 -> python3.5

如您所见,基于上面的shell命令,它是一个符号链接。

如果我使用Python 3.4中引入的pathlib模块,那么它将被成功识别为符号链接:

>>> from pathlib import Path
>>> Path('/usr/bin/python3').is_symlink()
True

现在,如果我使用osstat Python模块代替pathlib,则该文件不会被识别为符号链接:

>>> import os
>>> import stat
>>> st_mode = os.stat('/usr/bin/python3').st_mode
>>> st_mode
33261
>>> stat.S_ISLNK(st_mode)
False

我最初在Docker Container中通过Docker for Mac尝试了这个,然后在一个普通的Ubuntu 16.04中,结果是相同的。

知道为什么会这样吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

os.stat解决了目标。如果想要符号链接本身的信息,请使用os.lstat

这是the documentation

  

os.stat(path)

     

在给定路径上执行等效的stat()系统调用。 (此函数遵循符号链接;对于符号链接使用lstat()。)

VS

  

os.lstat(path)

     

在给定路径上执行等效的lstat()系统调用。与stat()类似,但不遵循符号链接。在不支持符号链接的平台上,这是stat()的别名。