mit bytearray mit sockel.recv_into

Ich bin dabei einige socket-E /a, und mit einem bytearray-Objekt, das als Puffer. Ich möchte Daten mit einem offset in diesem Puffer mit csock.recv_into, wie unten gezeigt, um zu vermeiden, Vermittler von string-Objekten. Leider scheint es bytearrays können nicht so genutzt werden, und der code unten funktioniert nicht.

buf    = bytearray(b" " * toread)
read   = 0
while(toread):
  nbytes = csock.recv_into(buf[read:],toread)
  toread -= nbytes
  read   += nbytes

So, stattdessen bin ich mit dem nachstehenden code, die hat Verwendung eines temporären string (und funktioniert)...

buf    = bytearray(b" " * toread)
read   = 0
while(toread):
  tmp = csock.recv(toread)
  nbytes = len(tmp)
  buf[read:] = tmp
  toread -= nbytes
  read   += nbytes

Gibt es eine elegantere Möglichkeit, das zu tun, erfordert nicht kopieren intermediate Schnüre um?

  • Welche Fehler sind Sie immer? Welche version von Python benutzt du (genau)? bugs.python.org/issue7827 lässt vermuten, dass dieses Problem behoben ist, da der Python-2.7.2.
  • python-version 2.7.3. Und dies bezieht sich nicht auf den Fehler... csock.recv_into(buf) funktioniert gut für mich. Was nicht möglich ist, es zu benutzen wie diese: csock.recv_into(buf[gelesen:]), da dann das original buf-Objekt nicht aktualisiert werden.
InformationsquelleAutor cyann | 2013-04-12
Schreibe einen Kommentar