У меня есть скрипт, который ищет каталог, содержащий определенный файл, начиная с текущего каталога и поднимаясь вверх по дереву (подумайте о попытке выяснить, где находится каталог .git
).
Мой метод выглядит следующим образом:
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
Теперь проблема с этим методом заключается в том, что, если он не может найти каталог, он зацикливается (и, в конечном итоге, переполняется стек), потому что, по-видимому, соединение /
и ..
снова дает вам /
. Я попытался сравнить path
с parent
или их repr
, но это не сработало (они всегда были разными). Мой обходной путь на данный момент состоит в том, чтобы включить счетчик глубины в рекурсивный метод и остановиться на каком-то случайном максимальном пороге.
Таким образом, у меня вопрос: существует ли надежный кросс-платформенный способ проверить, достиг ли я корня в файловой системе?