I used paramiko to do it with SFTP. I pretty much copied some code from Stack Exchange to make this:
import paramiko class SingleCommandSFTP(object): def __init__(self, host, username, password, port = 22): self.host = host self.username = username self.password = password self.port = port def _open(self): self.transport = paramiko.Transport((self.host, self.port)) self.transport.connect(username = self.username, password = self.password) self.sftp_client = paramiko.SFTPClient.from_transport(self.transport) def _close(self): self.sftp_client.close() self.transport.close() def rename(self, source, destination): self._open() self.sftp_client.rename(oldpath = source, newpath = destination) self._close() # Add further commands as and when required.
It only has rename, but that's all I need for now. It would probably be worth making a decorator for the _open / _close functions if many more functions were to be added, but I don't quite know how to do that (yet).
Problems (Mac):If you try to easy_install paramiko on Mavericks, it'll probably fail because it can't compile pycrypto. You need to install Xcode and fiddle about a bit (Found at Stack Exchange and Abakas):
- In Xcode, go Preferences > Downloads, and click on the "Install" button next to "Command Line Tools" to install the compiler needed by Python.
- sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
Problems (Windows):On Windows, it wasn't practical to install a suitable compiler to build pycrypto from source. I used the 32-bit installer for Python 2.7 (downloads are here). I had installed Python for all users, but that caused another problem solved by Stack Exchange. I uninstalled Python an installed for the user only.
I also had to install the ECDSA cryptographic signature library as this wasn't found when importing paramiko.