Seite 1 von 1

Client-Fortschrittsanzeige bei Web-Download

Verfasst: Donnerstag 7. Juni 2007, 13:42
von achim
Hallo Liebe Community,

Ich habe ein Problem, bei dem ich einfach nicht weiterkomme. Vielleicht kennt jemand eine Lösung:

Ich schreibe gerade ein Python-Programm, das Daten von einem Webserver holt, indem es ein PHP-Skript aufruft, das Daten aus einer Datenbank liest und als Text ausgibt, in dem jeder Datensatz einer Zeile entspricht.

Ich mache das über die HTTPSConnection der httplib und erzeuge dann das HTTPResponse-Objekt über die Methode getresponse(). Anschliessend schreibe ich die Daten dann mit read() in eine Liste. Das funktioniert soweit auch problemlos. Die Übertragung kann bei entsprechend vielen Datensätzen auch schon mal ein paar Sekunden dauern.

Ich hätte nun gerne eine Fortschrittssanzeige, die in Abhängigkeit von den bereits übertragenen Datensätzen (also Zeilen) anzeigt, wie lange die Übertragung noch dauert. Im Prinzip ganz genauso wie der Gauge beim Intenet-Explorer im Statusbar.

Die Methode HTTPResponse.read() liest aber alle Datensätze auf einmal, man hat keine Möglichkeit, Zeile für Zeile einzulesen, wodurch ein entsprechendes Verhalten über eine Schleife leicht zu implementieren wäre.

Geht das mit diesen Objekten und Methoden überhaupt so, wie ich mir das vorstelle, oder muss man da eher auf "niedrigere" Netzwerkfunktionen zurückgreifen?

Freue mich auf Eure Antworten
Achim

Verfasst: Donnerstag 7. Juni 2007, 13:57
von mitsuhiko
1.) nimm die urllib.
2.) entweder immer x bytes lesen und dann den balken bewegen oder thread für den download aufmachen.

Verfasst: Donnerstag 7. Juni 2007, 16:36
von pythonist
Mal n kleines Beispiel:

Code: Alles auswählen

import urllib2

url = urllib2.urlopen("http://wasweißich.py")
downloaded = 0
ausgabe = ""
while True:
    buf = url.read(1024)
    if not buf:
        break
    downloaded += len(buf)
    ausgabe += buf
Da hast du in downloaded immer die Anzahl der Bytes die schon geladen wurden, und in ausgabe das geladene.

pythonist

Verfasst: Donnerstag 7. Juni 2007, 17:28
von achim
Danke, werd ich ausprobieren...

...

Ok, ich glaube, damit kann ich was anfangen

Danke
Achim

Verfasst: Donnerstag 7. Juni 2007, 20:18
von Sr4l
schau dir mal folgendes an:

http://www.python-forum.de/topic-3061.html

Verfasst: Donnerstag 7. Juni 2007, 21:34
von Y0Gi
Und noch ein weiteres Programm als Anschauungsobjekt.