Sujet : Re: Liens symboliques sous Windows
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.pythonDate : 17. Nov 2021, 22:19:24
Autres entêtes
Organisation : Université de Strasbourg
Message-ID : <871r3eilgz.fsf@universite-de-strasbourg.fr.invalid>
References : 1
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
ast <
ast@invalid> writes:
Il me semble que les liens symboliques de Windows ne sont
pas bien reconnus par les modules os et pathlib.
Voyez:
>
from pathlib import Path
p2 = Path('C:/Users/jm/desktop/json.txt - Raccourci.lnk')
p2
WindowsPath('C:/Users/jm/desktop/json.txt - Raccourci.lnk')
p2.exists()
True
p2.is_file()
True
p2.is_symlink()
False
D'après le nom du fichier, je pense qu'il s'agit d'un "shortcut"
Windows, ce qui n'est pas la même chose qu'un lien symbolique : un
shortcut est un fichier normal (c'est à l'application de l'interpréter
comme contenant le nom d'un autre fichier), alors qu'un lien symbolique
est résolu par les appels système et est donc transparent pour les
applications.
Sur cette dernière commande, j'attendais True et pour le
p2.is_file j'attendais plutôt False
Pour Path.is_file() (de pathlib) la réponse concerne la cible du lien
symbolique si ton chemin est celui d'un lien symbolique, donc impossible
d'utiliser cela pour faire la distinction.
Pour os.is_file() il y a un paramètre "follow_symlinks" qui doit être
placé explcitement à False pour distinguer les fichiers "normaux"
(regular) des liens vers des fichiers normaux. Apparemment pathlib n'a
pas repris cette possibilité et utilise la version par défaut
(follow_symlinks=True).
Avec la lib os, c'est pareil
Oui, je pense que c'est elle qui fait le travail.
-- Alain.