Ich habe mir mal eben den Spaß gemacht und absichtlich eine infinite recursion Situation geschaffen, über welches ich dann os.walk(path, followlinks=True) laufen lasse:
[codebox=bash file=Unbenannt.bsh]
$ tree -a
.
└── dir1
├── dir2
│ ├── dir3
│ │ ├── dir4 -> ../../../dir1
│ │ ├── file3
│ │ └── file3.conf
│ ├── file2
│ └── file2.conf
├── file1
└── file1.conf
4 directories, 6 files
$ [/code]
Zusammen mit folgendem Python Code:
Code: Alles auswählen
def find(pattern, path):
result = []
for root, dirs, files in os.walk(path, followlinks=True):
for name in files:
if fnmatch.fnmatch(name, pattern):
result.append(os.path.join(root, name))
return result
find('*.conf', PATH)
Ich hätte also einen Absturz erwartet. Stattdessen scheint die resultierende Liste jedoch maximal 120 Einträge zu umfassen; also das sollte, bei obiger Struktur, ja einer Verzeichnistiefe von 40 entsprechen, wenn ich mich nicht vertue (3 "Treffer" pro Durchlauf, also: 120 / 3 = 40).Note Be aware that setting followlinks to True can lead to infinite recursion if a link points to a parent directory of itself. walk() does not keep track of the directories it visited already.
Einen Fehler gibt es jedoch scheinbar nicht.
Weiß zufällig jemand was mich da "rettet" - ist es tatsächlich ein Verzeichnistiefen-Limit in os.walk()? Falls ja: Das scheint "hart" zu sein; sprich: Kann man dem als Lektion entnehmen das Verzeichnisse maximal 40 Ebenen tief sein dürfen?