print-Anweisung zeitgleich in Tex-Widget umleiten
@Max77: Die Tupel werden von `os.walk()` erstellt und geliefert:
In Zeile 34 bzw. 41, je nach dem ob `topdown` wahr oder falsch ist, und in Zeile 39 werden die Tupel von dem rekursiven Aufruf durchgereicht. (Den DocString habe ich gekürzt wiedergegeben.)
Code: Alles auswählen
def walk(top, topdown=True, onerror=None, followlinks=False):
"""Directory tree generator.
For each directory in the directory tree rooted at top (including top
itself, but excluding '.' and '..'), yields a 3-tuple
dirpath, dirnames, filenames
[…]
"""
islink, join, isdir = path.islink, path.join, path.isdir
# We may not have read permission for top, in which case we can't
# get a list of the files the directory contains. os.path.walk
# always suppressed the exception then, rather than blow up for a
# minor reason when (say) a thousand readable directories are still
# left to visit. That logic is copied here.
try:
# Note that listdir and error are globals in this module due
# to earlier import-*.
names = listdir(top)
except error, err:
if onerror is not None:
onerror(err)
return
dirs, nondirs = [], []
for name in names:
if isdir(join(top, name)):
dirs.append(name)
else:
nondirs.append(name)
if topdown:
yield top, dirs, nondirs
for name in dirs:
new_path = join(top, name)
if followlinks or not islink(new_path):
for x in walk(new_path, topdown, onerror, followlinks):
yield x
if not topdown:
yield top, dirs, nondirs
Jaaah Natürlich ! Man bin ich Blind. os.walk liefert ja eine Dreier-Tupel zurück.
Das hatte ich gar nicht mehr auf der „Rechnung“
Ich glaube die Funktion calculate_hashes verstanden zu haben.
Der 1. Parameter nimmt den zu untersuchenden Ordner+Pfad in Empfang.
Der 2. Parameter den DatenausgabeOrdner entgegen.
Mit dem 3. Parameter sagt man der Funktion WOHIN der Datenstrom geliefert werden soll.
In diesem Falle in eine Warteschlange.
calculate_hashes wird in einem Thread ausgeführt d.H. Die Funktion läuft parallel zur TK-GUI
und kann diese nicht mehr blockieren.
Aber der Abschnitt zwischen Zeile 25. und Zeile 30. ist mir noch nicht klar.
Wozu dient die while Schleife ?
Was bedeutet bytes = data.read(65536) ?
Ist bytes eine Build-In Funktion ?
Das hatte ich gar nicht mehr auf der „Rechnung“
Ich glaube die Funktion calculate_hashes verstanden zu haben.
Der 1. Parameter nimmt den zu untersuchenden Ordner+Pfad in Empfang.
Der 2. Parameter den DatenausgabeOrdner entgegen.
Mit dem 3. Parameter sagt man der Funktion WOHIN der Datenstrom geliefert werden soll.
In diesem Falle in eine Warteschlange.
calculate_hashes wird in einem Thread ausgeführt d.H. Die Funktion läuft parallel zur TK-GUI
und kann diese nicht mehr blockieren.
Aber der Abschnitt zwischen Zeile 25. und Zeile 30. ist mir noch nicht klar.
Wozu dient die while Schleife ?
Was bedeutet bytes = data.read(65536) ?
Ist bytes eine Build-In Funktion ?
Natürlich kann man die Zeilen 25-30 auch eleganter lösen:
Wie schon am Anfang angesprochen wird irgendwann einmal der Arbeitsspeicher knapp, wenn man versucht von DVD-Images den Hashwert zu berechnen. Daher führt man die Rechnung in Häppchen durch.
Code: Alles auswählen
for block in iter(partial(in_file.read, block_size), b''):
md5.update(block)