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
Client-Fortschrittsanzeige bei Web-Download
Mal n kleines Beispiel:
Da hast du in downloaded immer die Anzahl der Bytes die schon geladen wurden, und in ausgabe das geladene.
pythonist
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
pythonist
Und noch ein weiteres Programm als Anschauungsobjekt.