Проверить, является ли каталог корневым (файловой системой)

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

Таким образом, у меня вопрос: существует ли надежный кросс-платформенный способ проверить, достиг ли я корня в файловой системе?

9
задан Philippe 22 March 2012 в 13:22
поделиться