Seite 2 von 2

Re: print-Anweisung zeitgleich in Tex-Widget umleiten

Verfasst: Donnerstag 14. Juli 2016, 16:13
von DasIch
In os.walk() werden die Tupel erstellt. Wie genau das passiert kannst du nachlesen.

Re: print-Anweisung zeitgleich in Tex-Widget umleiten

Verfasst: Donnerstag 14. Juli 2016, 16:18
von BlackJack
@Max77: Die Tupel werden von `os.walk()` erstellt und geliefert:

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
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.)

Re: print-Anweisung zeitgleich in Tex-Widget umleiten

Verfasst: Freitag 15. Juli 2016, 17:21
von Max77
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 ?

Re: print-Anweisung zeitgleich in Tex-Widget umleiten

Verfasst: Freitag 15. Juli 2016, 17:36
von Sirius3
Natürlich kann man die Zeilen 25-30 auch eleganter lösen:

Code: Alles auswählen

            for block in iter(partial(in_file.read, block_size), b''):
                md5.update(block)
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.