Wenn Sie große Dateien mit shutil.copy()
kopieren, erhalten Sie keinen Hinweis darauf, wie der Vorgang abläuft.
Ich habe etwas zusammengestellt, das funktioniert - es verwendet eine einfache ProgressBar-Klasse (die einfach einen einfachen ASCII-Fortschrittsbalken als String zurückgibt) und eine Schleife von open().read()
und .write()
, um das eigentliche Kopieren durchzuführen. Es zeigt den Fortschrittsbalken mit sys.stdout.write("\r%s\r" % (the_progress_bar))
an, was ein bisschen hackisch ist, aber es funktioniert.
Sie können den Code (im Kontext) hier auf github sehen / p>
Gibt es ein eingebautes Modul, das das besser macht? Gibt es Verbesserungen, die an diesem Code vorgenommen werden können?
Zwei Dinge:
copy_with_prog
nicht den Fortschrittsbalken selbst ausgibt, sondern eine Rückruffunktion aufruft, damit der Anrufer entscheiden kann, wie der Fortschritt angezeigt werden soll. Vielleicht in etwa so:
%Vor%Übertreibung? Vielleicht. Aber auf fast jedem System, Linux, Mac, und mit einem schnellen wxWidgets unter Windows installieren, können Sie das echte Geschäft haben, mit Pause und Abbrechen von Schaltflächen in einem GUI-Setup. Macs werden heutzutage mit wxWidgets ausgeliefert und es ist ein übliches Paket unter Linux.
Eine einzelne Datei ist sehr schnell (sie wird sofort fertig und sieht kaputt aus), so dass Sie vielleicht einen fileSet-Job erstellen möchten, der einmal pro Datei statt einmal pro Block tickt. Viel Spaß!
-Jim Carroll
%Vor%