Extracting a short using struct - won't print.
Graham Nicholls
graham at rockcons.co.uk
Thu Aug 7 12:11:57 EDT 2003
Graham Nicholls wrote:
> Peter Hansen wrote:
>
>> Graham Nicholls wrote:
>>>
>>> Thanks to Richard and Alex, I'm doing this:
>>>
>>> seg_stru=">BHH"
>>> seg_data=self.fhand.read(struct.calcsize(seg_stru))
>>> data=struct.unpack(seg_stru,seg_data)
>>> x=seg_data[1]
>>> y=seg_data[2]
>>
>> Why are you unpacking the struct if you aren't going to use the
>> unpacked data?
>
> Err, I'm trying to extract two shorts - the x and y size in pixels of an
> image, which I'll use to scale it to fit another pair of parameters. What
> makes you think I'm not using the data? Am I not - I thought I was!
>
> I realise that ">BHH" above ouhjt really to be "xHH" but aside from that,
> I don't understand your point - theres more code after the debug in the
> rel app - returning x and y.
>
>>
>>> if debug:
>>> print ("DEBUG: Image [%s] is [%d] by [%d] pixels" %
>>> (self.fname,x,y))
>>
>> Best way to troubleshoot this kind of thing, in my experience,
>> is to insert "import pdb; pdb.set_trace()" into the code just
>> above the failing line, then use the debugger to inspect the
>> values directly just before they are used. (You need to execute
>> the "r" or "return" command immediately after the debugger is
>> entered... the rest is pretty straightforward to learn.)
>>
> I'll give that a go, thanks
>> -Peter
>
OK, the code now looks like this:
seg_stru=">xHH"
seg_data=self.fhand.read(struct.calcsize(seg_stru))
data=struct.unpack(seg_stru,seg_data)
x=seg_data[1]
y=seg_data[2]
import pdb ; pdb.set_trace()
if debug:
print ("DEBUG: Image [%s] is [%d] by [%d] pixels" % (self.fname,x,y))
return(x,y)
When I run it, I get this:
EBUG: Scaling image file hb.jpg to fit 100 100
DEBUG: Searching hb.jpg for dimensions
DEBUG: found header type e0
DEBUG: found header type db
DEBUG: found header type db
DEBUG: found header type c0
--Return--
> /usr/local/lib/python2.3/pdb.py(972)set_trace()->None
-> Pdb().set_trace()
(Pdb)
(Pdb) r
> /home/graham/work/hsb/pdflive/pdf_merge(427)getsize()
-> if debug:
(Pdb) print x
(Pdb) print y
m
(Pdb)
Which _seems_ to indicate that unpack is not unpacking the shorts as shorts,
but as chars. Is this right?
Thanks
Graham
--
Graham Nicholls
Rock Computer Consultancy
More information about the Python-list
mailing list