我遇到了一个奇怪的情况,似乎不同的Python模块(os
和stat
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
现在,如果我使用os
和stat
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中,结果是相同的。
知道为什么会这样吗?
谢谢!
答案 0 :(得分:3)
os.stat
解决了目标。如果想要符号链接本身的信息,请使用os.lstat
。
os.stat(path)
在给定路径上执行等效的stat()系统调用。 (此函数遵循符号链接;对于符号链接使用lstat()。)
VS
os.lstat(path)
在给定路径上执行等效的lstat()系统调用。与stat()类似,但不遵循符号链接。在不支持符号链接的平台上,这是stat()的别名。