[Tutor] Re: Reading text lines from a socket
Bob Ippolito
bob at redivi.com
Sat Feb 28 21:11:55 EST 2004
The real solution is just to use a layer of abstraction, like
asyncore/medusa, Twisted, etc. Relying on the fact that your operating
system may or may not allow a socket to act sort of like a file is
really not something you should do, from Python or otherwise.
socket.makefile is platform specific, at best.
On 2004-02-28 20:28:59 -0500, Lloyd Kvam <pythontutor at venix.com> said:
> Well, I've never used it, but sockets do have the makefile method. That
> would seem to fit what you're trying to do.
>
> Sandip Bhattacharya wrote:
>
>> [Reposting to the general list too]
>>
>> Lloyd Kvam wrote:
>>
>>> Sockets deal with packetized data. The network protocols do not guarantee
>>> keeping the data in line oriented chunks - even if the data starts out
>>> that way.
>>>
>>> You need to deal with extracting lines from chunks. So long as the
>>> connection is
>>> working properly, this is easy. The challenge occurs when the
>>> remainder of a line
>>> never gets delivered. The best strategy depends upon the details of
>>> what you are
>>> doing.
>>
>>
>> I understand that. In Python using sockets is like using sockets in C.
>>
>> However, I was looking for a python equivalent of the perl idiom of
>> opening a socket and getting a file handle ... and then reading this
>> file handle as any other line oriented file using $socket->readline
>>
>> I am trying to write a simple Netcraft style script which tries the
>> HEAD method on a webserver and reads the Server: header from the
>> response. I would not like to use urllib, because even a call to
>> something like urllib.info() reads in the complete webpage on an open().
>>
>> Even if this particular problem could be done elegantly, I would be
>> interested to know the answer to my original question because the
>> feature of reading a line at a time from a socket will help me in a lot
>> of other places in the future.
>>
>> - Sandip
More information about the Python-list
mailing list