2017-07-27 53 views
1

我遇到了一个奇怪的情况,它看起来不同的Python模块(osstat vs pathlib)标识不同,如果文件是符号链接或不符合。Python 3没有检测到符号链接通过统计

让我们例如python3二进制:

[email protected]:~$ 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 

,如果不是pathlib,我用的是osstat Python模块,文件不被识别为一个符号链接:

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

我在一个码头工人集装箱通过码头工人试过这种的Mac开始,然后在一个普通的Ubuntu 16.04和结果都是一样的。

任何想法,为什么这可能会发生?

谢谢!

回答

2

os.stat解决了它的目标。当你想要符号链接本身的信息时使用os.lstat

这里的the documentation

os.stat(path)

执行给定的路径上的STAT()系统调用的等价物。 (此功能如​​下符号链接;到STAT一个符号链接使用LSTAT()。)

VS

os.lstat(path)

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

+0

太棒了,谢谢! – Paris