I am looking to write a text directly to my FTP site from python without storing a temp file on disk, something like:
ftp = FTP('ftp.mysite.com')
ftp.login('un','pw')
ftp.cwd('/')
ftp.storbinary('STOR myfile.html', 'text to store', 'rb')
is this even possible? Thank you very much.
Have you tried using a
StringIO
object, which quacks like a file but is just a string?EDIT: @abarnert's answer is the Python3 equivalent. Mine is the Python2 version.
As the docs say:
So, you need to give it a file-like object with an appropriate
read
method.A string is not a file-like object, but an
io.BytesIO
is. So:Also, notice that I didn't pass that
'rb'
argument. The third parameter tostorbinary
is blocksize, and'rb'
is obviously not a valid block size.If you need to work with Python 2.5 or earlier, see Dan Lenski's answer.
And if you need to work with Python 2.6-2.7, and performance of the file-like object is important (it isn't here, but there are some cases where it might be), and you only care about CPython, use his answer but with
cStringIO
in place ofStringIO
. (PlainStringIO
is slow in 2.x, andio.BytesIO
is even slower before around 3.3.)