2010-06-22 8 views
24

J'ai installé et écrit le Paramiko suivant qui est incapable de mettre le fichier. Il est facile de 'obtenir' un fichier et d'y exécuter des commandes 'ls'.'Put' dans SFTP en utilisant PAramiko

#set username & password 
username='runaway' 
password='runaway' 
port=22 
source= '/Unzip.sh' 
destination ='/var/mpx/www/http' 


#SFTP 
client.load_system_host_keys() 
print " hostname =%s \n username=%s \n password=%s \n" (hostname,username,password) 
t = paramiko.Transport((hostname, port)) 
t.connect(username=username,password=password) 
sftp = paramiko.SFTPClient.from_transport(t) 
sftp.put(source,destination) 
#sftp.close() 
#t.close() 

l'aide d'une commande 'put' donne l'erreur suivante trace & de pile -

File "upload_file.py", line 84, in ? 
    sftp.put(source,destination) 
    File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 522, in put 
    fr = self.file(remotepath, 'wb') 
    File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 221, in open 
    t, msg = self._request(CMD_OPEN, filename, imode, attrblock) 
    File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 572, in _request 
    return self._read_response(num) 
    File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 619, in _read_response 
    self._convert_status(msg) 
    File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 649, in _convert_status 
    raise IOError(text) 
IOError: Failure 

Comment puis-je surmonter cela?

Répondre

51

La solution semblait très drôle pour moi! Vous venez de modifier le chemin de destination pour inclure également le nom du fichier. Je ne m'attendais pas à une erreur de ce genre venant d'un paquet Python.

+0

vous pourriez peut-être paramiko patch à cet égard;) à savoir donc il comprend les dossiers de destination. à la vôtre – nuts

0

Cela se produit également en 2.0.2 lorsque vous essayez de sftp.mkdir('/exists'):

Traceback (most recent call last): 
    ... 
    File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 380, in mkdir 
    self._request(CMD_MKDIR, path, attr) 
    File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 730, in _request 
    return self._read_response(num) 
    File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 781, in _read_response 
    self._convert_status(msg) 
    File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 811, in _convert_status 
    raise IOError(text) 
IOError: Failure 

C'était mon Python 2.7.9 fix:

try: 
    sftp.mkdir(remote_dir) 
except IOError: 
    logging.debug('%s already exists.', remote_dir)