ftp.storlines error

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Mon Feb 1 17:36:36 EST 2010


En Sun, 31 Jan 2010 19:07:44 -0300, Mik0b0 <newssw at gmail.com> escribió:

> Good day/night/etc.
> I am rather a newb in Python (learning Python 3). I am trying to
> create a small script for FTP file uploads  on my home network. The
> script looks like this:
>
> from ftplib import FTP
> ftp=FTP('10.0.0.1')
> ftp.login('mike','*****')
> directory='/var/www/blabla/'
> ftp.cwd(directory)
> ftp.retrlines('LIST')
> print('<- - - - - - - - - >')
> file_to_change='test'
> file=1
> file=open(file_to_change,'w')
> text='test'
> file.write(text)
> ftp.storlines('STOR ' + file_to_change,file)
> ftp.retrlines('LIST')
> file.close()
>
> The output is like this:
> Traceback (most recent call last):
>   File "ftp.py", line 13, in <module>
>     ftp.storlines('STOR ' + file_to_change,i)
>   File "/usr/lib/python3.1/ftplib.py", line 474, in storlines
>     buf = fp.readline()
> IOError: not readable

For the ftp client to be able to read and upload the file, it must have  
been opened for reading. But you opened it with mode 'w' a few lines above.
A quick and dirty way would be to close the file right after  
file.write(...) and re-open it with mode 'r':

   ...
   file.write(text)
   file.close()
   file = open(file_to_change,'r')
   ftp.storlines(...)

But I'd separate file-creation from file-uploading. When it's time to  
upload the file, assume it already exists and has the desired contents  
(because it has already been created earlier by the same script, or  
perhaps by some other process), so you just have to open it with mode 'r'.

-- 
Gabriel Genellina




More information about the Python-list mailing list