file transfer over LAN
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Sat Mar 28 01:01:32 EDT 2009
En Thu, 26 Mar 2009 21:52:18 -0300, MRAB <google at mrabarnett.plus.com>
escribió:
> prakash jp wrote:
>> On generating log file on remote systems(say client), I want to
>> transfer them to the Network Admins(say Server) Computer. In doing so
>> all the contents of the log file r not transfered, only part of the
>> file.
>> f=open(r'C:\\Python25\src\log.txt', 'rb')
(better if all of those \ are doubled)
>> s.send(str(fsize).zfill(8))
>> s.send(f.read())
>
> You might want to try sendall() instead of send(). send() doesn't
> guarantee to send all the data, but instead returns the number of bytes
> that it did actually send. sendall(), on the other hand, will keep
> going until all of the data is sent.
Yes, I'd say this is the OP's problem. Same happens on the receiving side,
unfortunately there is no recvall() method.
A safer approach would be to use s.makefile and shutil.copyfileobj:
(sender) (untested)
s.send(str(fsize).zfill(8))
sfile = s.makefile("wb")
shutil.copyfileobj(f, sfile)
sfile.close()
s.close()
f.close()
(receiver):
fsize=int(conn.recv(8))
sfile = conn.makefile("rb")
shutil.copyfileobj(sfile, f)
sfile.close()
conn.close()
s.close()
f.close()
http://docs.python.org/library/socket.html#socket.socket.makefile
http://docs.python.org/library/shutil.html#shutil.copyfileobj
--
Gabriel Genellina
More information about the Python-list
mailing list