2017-07-27 3 views
1

Ich habe in eine seltsame Situation geraten, wo es verschiedene Python-Module (os und stat vs pathlib) unterschiedlich identifiziert, wenn eine Datei ein Symlink ist oder nicht.Python 3 erkennt keine Symlinks über stat

ist zum Beispiel die python3 binäre nehmen lassen:

[email protected]:~$ ls -la /usr/bin/python3 
lrwxrwxrwx 1 root root 9 Mar 23 2016 /usr/bin/python3 -> python3.5 

Wie Sie, basierend auf dem Shell-Befehl oben sehen kann, ist es ein symbolischer Link.

Wenn ich das pathlib Modul in Python eingeführt verwenden 3.4 wird diese erfolgreich als symbolische Verbindung identifiziert wird:

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

Wenn nun statt pathlib, verwende ich die os und stat Python-Modulen, die Datei wird nicht als symbolische Verbindung identifiziert: das in einem Docker Container über Docker für Mac

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

ich versuchte zunächst, und dann in einem normalen Ubuntu 16.04 und Ergebnisse sind die gleichen.

Eine Idee, warum das passieren könnte?

Danke!

Antwort

2

os.stat löst sein Ziel. Verwenden Sie os.lstat, wenn Sie Informationen zum Symlink selbst wünschen.

Hier the documentation:

os.stat(path)

Führen Sie das Äquivalent eines stat() Systemaufruf auf den angegebenen Pfad. (Diese Funktion folgt symbolischen Links, eine symbolische Verknüpfung Verwendung lstat stat().)

vs

os.lstat(path)

Perform das Äquivalent einer lstat() Systemaufruf auf dem gegebenen Weg. Ähnlich wie stat(), folgt aber nicht symbolischen Links. Auf Plattformen, die keine symbolischen Links unterstützen, ist dies ein Alias ​​für stat().

+0

Das ist erstaunlich, danke! – Paris