2017-07-27 50 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