How to get symlink-Ziel in Python?
Mithilfe von Python, die ich brauche, um zu überprüfen, ob Hunderte von symlinks sind korrekt, und erstellen Sie, wenn Sie nicht. Was ich jetzt mache, ist ein Vergleich der realen Pfade von dem, was ich will und was ich habe, aber es ist langsam, weil es über NFS mit automount.
Sonst werde ich noch ausführen, einen Teilprozess mit dem Befehl 'ls -l' und die Arbeit an der Liste von Zeichenketten zurückgegeben. Ich würde lieber eine bessere Lösung, mit einer Python-Bibliothek,...
Edit1: ich habe: link_name -> link_target
und dann link_target -> a_real_file
. Was ich brauche, ist zu extrahieren link_target
aus link_name
, nicht a_real_file
. I don ' T care, wenn die eigentliche Datei nicht vorhanden ist.
Edit2: ich das Vielleicht nicht Ausdrücken. Was ich meine, von einem richtigen symlink 'eine Verknüpfung, die auf einem vordefinierten Pfad, auch wenn es nicht vorhanden ist'. So brauche ich, um zu überprüfen, dass:
link_name_1 -> target_1
link_name_2 -> target_2
Das ist, warum ich brauchen, um zu extrahieren von Zielen, nicht die realen Pfade. Dann Vergleiche ich Sie auf eine Referenz (Wörterbuch). Also meine Frage ist: Wie extrahiere ich den Zielpfad?
InformationsquelleAutor zorggy | 2015-10-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem mit
os.readlink()
ist es nur lösen, Schritt 1 der link. Wir haben eine situation, woA
links auf einen anderen linkB
, undB
link ist freistehend.Nun in Python
os.readlink
gibt Sie das erste Ziel.Aber in den meisten Situationen, ich nehme an, wir sind daran interessiert, den aufgelösten Pfad. So
pathlib
hier helfen kann:Für ältere Python Versionen:
InformationsquelleAutor wim
Müssen Sie sich
os.readlink()
.Danke Armin, es ist genau das, was ich brauchte. Ich habe in der Lage zu bekommen ist das Ziel und die Aufgabe ist jetzt viel schneller.
InformationsquelleAutor Armin Rigo
Um festzustellen, ob ein directory-Eintrag ist ein symbolischer Link verwenden:
os.Pfad.islink(path)
True zurück, wenn der Pfad bezieht sich auf ein directory-Eintrag ist ein symbolischer link. Immer False, wenn symbolische links werden nicht unterstützt.
InformationsquelleAutor Madhavan
Bestimmen, wenn ein link defekt ist, können Sie
os.walk
- und test -os.path.exists(path)
wird False zurückgegeben, für einen kaputten link. Sie können dann mitos.path.realpath(path)
um herauszufinden, was der link werden soll, zeigt.So etwas wie (ungetestet):
InformationsquelleAutor AChampion