Je ne comprends pas le résultat du script suivant :
import os, sys
from stat import *
pathname = "/usr/share/icons/mdk-hicolor/normal"
mode = os.stat(pathname)[ST_MODE]
if S_ISLNK( mode ):
print "TEST LINK"
else:
print "TEST PAS LNK"
if S_ISDIR( mode ):
print "TEST DIRECTORY"
else:
print "TEST PAS DIR"
Lorsque je me lance, j'ai :
TEST PAS LNK
TEST DIRECTORY
or un ll me donne
#ls -l /usr/share/icons/mdk-hicolor/
total 4
-rw-r--r-- 1 root root index.desktop
lrwxrwxrwx 1 root root large -> /usr/share/icons/large/
lrwxrwxrwx 1 root root mini -> /usr/share/icons/mini/
lrwxrwxrwx 1 root root normal -> /usr/share/icons/
donc le script devrait afficher
TEST LINK
TEST PAS DIR
non ?
Du coup, je me retrouve avec une récursivité dans mon programme.
Toutes les explications pour expliquer mon erreur de raisonnement est la
bienvenu. (ainsi que sur la façon correcte de distingué un répertoire d'un
lien symbolique.)
stat() suit les liens, il est donc normal qu'il t'indique qu'il ne s'agit pas d'un lien. Il te faut utiliser lstat() si tu ne veux que les liens soient suivis. -- panic ("No CPUs found. System halted.n"); 2.4.3 linux/arch/parisc/kernel/setup.c
OoO Pendant le repas du jeudi 27 janvier 2005, vers 19:11,
Jean-Baptiste Renard <jb.renard@laposte.net> disait:
Je ne comprends pas le résultat du script suivant :
import os, sys
from stat import *
stat() suit les liens, il est donc normal qu'il t'indique qu'il ne
s'agit pas d'un lien. Il te faut utiliser lstat() si tu ne veux que
les liens soient suivis.
--
panic ("No CPUs found. System halted.n");
2.4.3 linux/arch/parisc/kernel/setup.c
stat() suit les liens, il est donc normal qu'il t'indique qu'il ne s'agit pas d'un lien. Il te faut utiliser lstat() si tu ne veux que les liens soient suivis. -- panic ("No CPUs found. System halted.n"); 2.4.3 linux/arch/parisc/kernel/setup.c
Jean-Baptiste Renard
Vincent Bernat wrote:
OoO Pendant le repas du jeudi 27 janvier 2005, vers 19:11, Jean-Baptiste Renard disait:
Je ne comprends pas le résultat du script suivant : import os, sys from stat import *
stat() suit les liens, il est donc normal qu'il t'indique qu'il ne s'agit pas d'un lien. Il te faut utiliser lstat() si tu ne veux que les liens soient suivis.
Merci beaucoup, lstat était bien la solution au problème.
Vincent Bernat wrote:
OoO Pendant le repas du jeudi 27 janvier 2005, vers 19:11,
Jean-Baptiste Renard <jb.renard@laposte.net> disait:
Je ne comprends pas le résultat du script suivant :
import os, sys
from stat import *
stat() suit les liens, il est donc normal qu'il t'indique qu'il ne
s'agit pas d'un lien. Il te faut utiliser lstat() si tu ne veux que
les liens soient suivis.
Merci beaucoup, lstat était bien la solution au problème.
stat() suit les liens, il est donc normal qu'il t'indique qu'il ne s'agit pas d'un lien. Il te faut utiliser lstat() si tu ne veux que les liens soient suivis.
Merci beaucoup, lstat était bien la solution au problème.
Jean-Baptiste Renard
Do Re Mi chel La Si Do wrote:
Bonsoir !
Désolé, mais, étant sous windows, je ne suis pas à même de comprendre ta question. Alors, y répondre...
Mais j'espère que tu trouveras une solution.
@-salutations Ok, merci tout de même. Juste pour information la notion de lien "hard link"
existe sous windows, uniquement en NTFS mais ce n'est pas trop connu.
Les liens NTFS, sous windows, sont liés au service "Client de suivi de lien distribué". En théorie, ils permettent aussi des liens inter-machines, via un réseau local. Mais, en pratique, on gagne en vitesse, en désactivant le service. De plus, la gestion est assez particulière.
Enfin, je suis heureux que tu ais eu une solution.
Bonne nuit. -- Michel Claveau
Re !
Les liens NTFS, sous windows, sont liés au service "Client de suivi de lien
distribué". En théorie, ils permettent aussi des liens inter-machines, via
un réseau local. Mais, en pratique, on gagne en vitesse, en désactivant le
service. De plus, la gestion est assez particulière.
Enfin, je suis heureux que tu ais eu une solution.
Les liens NTFS, sous windows, sont liés au service "Client de suivi de lien distribué". En théorie, ils permettent aussi des liens inter-machines, via un réseau local. Mais, en pratique, on gagne en vitesse, en désactivant le service. De plus, la gestion est assez particulière.
Enfin, je suis heureux que tu ais eu une solution.
Bonne nuit. -- Michel Claveau
jean-michel
"Jean-Baptiste Renard" a écrit dans le message de news:41f92ebd$0$1994$
Toutes les explications pour expliquer mon erreur de raisonnement est la bienvenu. (ainsi que sur la façon correcte de distingué un répertoire d'un lien symbolique.)
Normalement, la commande 'stat' donne des infos sur un fichier; donc dans ton cas, sur le fichier pointé par le lien. Si tu veux des infos sur un lien symbolique, il faut utiliser la commande 'lstat'. En ce moment, je n'ai pas d'unix sous la main; je ne peux donc pas vérifier, mais ce devrait être pareil en python. 'os.lstat' devrait donner 'TEST LNK/PAS DIR' Pour faire la distinction, tu as 'islink' et 'isdir' qui devraient être plus simple à utiliser. C'est ce que je prends, et je n'ai jamais eu de pb. Exemple (non testé) if isdir(pathname): print 'DIR' if islink(pathname): print 'LINK'
++jm
"Jean-Baptiste Renard" <jb.renard@laposte.net> a écrit dans le message de
news:41f92ebd$0$1994$626a14ce@news.free.fr...
Toutes les explications pour expliquer mon erreur de raisonnement est la
bienvenu. (ainsi que sur la façon correcte de distingué un répertoire d'un
lien symbolique.)
Normalement, la commande 'stat' donne des infos sur un fichier; donc dans
ton cas, sur le fichier pointé par le lien.
Si tu veux des infos sur un lien symbolique, il faut utiliser la commande
'lstat'.
En ce moment, je n'ai pas d'unix sous la main; je ne peux donc pas vérifier,
mais ce devrait être pareil en python. 'os.lstat' devrait donner 'TEST
LNK/PAS DIR'
Pour faire la distinction, tu as 'islink' et 'isdir' qui devraient être plus
simple à utiliser. C'est ce que je prends, et je n'ai jamais eu de pb.
Exemple (non testé)
if isdir(pathname):
print 'DIR'
if islink(pathname):
print 'LINK'
"Jean-Baptiste Renard" a écrit dans le message de news:41f92ebd$0$1994$
Toutes les explications pour expliquer mon erreur de raisonnement est la bienvenu. (ainsi que sur la façon correcte de distingué un répertoire d'un lien symbolique.)
Normalement, la commande 'stat' donne des infos sur un fichier; donc dans ton cas, sur le fichier pointé par le lien. Si tu veux des infos sur un lien symbolique, il faut utiliser la commande 'lstat'. En ce moment, je n'ai pas d'unix sous la main; je ne peux donc pas vérifier, mais ce devrait être pareil en python. 'os.lstat' devrait donner 'TEST LNK/PAS DIR' Pour faire la distinction, tu as 'islink' et 'isdir' qui devraient être plus simple à utiliser. C'est ce que je prends, et je n'ai jamais eu de pb. Exemple (non testé) if isdir(pathname): print 'DIR' if islink(pathname): print 'LINK'