J'ai un script qui recherche un répertoire contenant un fichier spécifique, en partant du répertoire courant et en remontant l'arborescence (pensez à essayer de trouver l'endroit où se trouve le .git
s'installe dans le répertoire).
Ma méthode ressemble à ceci :
def getDir(self,cwd):
path = os.path.abspath(cwd)
if not os.path.isdir(path):
raise RuntimeError("getDir should not be run on files")
if FILE in os.listdir(path):
return path
parent = os.path.join(path, os.path.pardir)
if os.access(parent, os.R_OK) and os.access(parent, os.X_OK):
return self.getDir(parent)
else
return None
Le problème avec cette méthode est que, si elle ne trouve pas le répertoire, elle tourne en boucle (et finit par déborder de la pile) parce que, apparemment, en rejoignant /
y ..
vous donne /
encore. J'ai essayé de comparer path
con parent
ou leur repr
mais cela n'a pas fonctionné (ils étaient toujours distincts). Ma solution pour l'instant est d'inclure un compteur de profondeur dans la méthode récursive et de s'arrêter à un seuil maximum aléatoire.
Ma question est donc la suivante : existe-t-il un moyen fiable et multiplateforme de vérifier si j'ai atteint une racine dans le système de fichiers ?