【问题标题】:Python 3 does not detect symlinks via statPython 3 不通过 stat 检测符号链接
【发布时间】:2017-07-27 18:28:20
【问题描述】:

我遇到了一个奇怪的情况,似乎不同的 Python 模块(osstatpathlib)以不同的方式识别文件是否是符号链接。

我们以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 for Mac 在 Docker 容器中尝试了这个,然后在普通的 Ubuntu 16.04 中进行了尝试,结果是一样的。

知道为什么会发生这种情况吗?

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    这里是the documentation

    os.stat(path)

    在给定路径上执行相当于 stat() 系统调用。 (此函数遵循符号链接;要统计符号链接,请使用 lstat()。)

    os.lstat(path)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多