struct.unpack() on a stream

Gabriel Genellina gagsl-py2 at
Fri Feb 27 07:58:51 EST 2009

En Fri, 27 Feb 2009 10:10:39 -0200, MRAB <google at>  

> Gabriel Genellina wrote:
>> En Fri, 27 Feb 2009 09:29:16 -0200, Ulrich Eckhardt  
>> <eckhardt at> escribió:
>>> I have a socket from which I would like to parse some data, how would  
>>> I do
>>> that? Of course, I can manually read data from the socket until  
>>> unpack()
>>> stops complaining about a lack of data, but that sounds rather  
>>> inelegant.
>>> Any better suggestions?
>>  Read until you get the required bytes; use the size attribute.
> The struct module has a function called "calcsize", eg:
>  >>> import struct
>  >>> struct.calcsize("<H")
> 2
> That will tell you how many bytes to read.

The struct module defines also a Struct class; instead of using the module  
functions, it's more efficient to create a Struct instance and call its  
methods when one is going to use the same format more than once:

py> s = struct.Struct("<H")
py> s.size
py> s.unpack("\x40\x00")

That's the size attribute I was talking about - too tersely perhaps.

Gabriel Genellina

More information about the Python-list mailing list