2017-04-19 4 views
0

Je souhaite télécharger récursivement des fichiers depuis un serveur Linux vers un bureau Windows. J'utilise le code suivant:Transfert de fichiers avec pysftp.get_r entre linux et windows

import pysftp 
import sys 

cnopts = pysftp.CnOpts() 
cnopts.hostkeys = None 

with pysftp.Connection(host="192.168.1.1", username="user", password="secret", cnopts=cnopts) as sftp: 
    sftp.get_r ('test_sftp', 'C:\\Users\\user\\Desktop\\my_dir\\', preserve_mtime=False) 
    sftp.close() 

Je l'encoutered l'erreur suivante (lors de la copie récursive les fichiers):

Traceback (most recent call last): 
    File "blah.py", line 12, in <module> 
    sftp.get_r ('teste_sftp', 'C:\\Users\\user\\Desktop\\my_dir\\', preserve_mtime=False) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\pysftp\__init__.py", line 311, in get_r 
    preserve_mtime=preserve_mtime) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\pysftp\__init__.py", line 249, in get 
    self._sftp.get(remotepath, localpath, callback=callback) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\paramiko\sftp_client.py", line 720, in get 
    with open(localpath, 'wb') as fl: 
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\user\\Desktop\\my_dir\\test_sftp/n1/M51' 

Je comprends que pysftp tente de recréer la structure des dossiers de la source dans le dossier de destination, mais il n'est pas sensible au fait qu'il fonctionne sur une machine Windows et que les barres obliques devraient être des barres obliques inverses.

Comment y remédier?

+0

Avez-vous vérifié cela? http://stackoverflow.com/questions/24427283/getting-a-files-from-remote-path-to-local-dir-using-sftp-in-python – Valilutzik

+0

@Valilutzik, je l'ai fait. Cela semble être un problème d'autorisation système, et il utilise également une fonction différente dans paramiko. – LuizAngioletti

Répondre

1

Actuellement, pysftp ne prend pas en charge cette fonctionnalité.

Je recommanderais le default FTP library de Python, qui est déjà dans la bibliothèque standard (batteries included). Là, vous pouvez appeler retrbinary() donnant le dossier désiré.

+0

la bibliothèque FTP par défaut ne supporte pas sftp, ou le fait? – LuizAngioletti

+0

C'est le cas. @LuizAngioletti –

+0

Pouvez-vous fournir une source sur la façon d'utiliser SFTP avec la bibliothèque FTP par défaut? SFTP et FTP sont complètement différents donc il ne fait pas car pour qu'ils existent dans la même bibliothèque. – Caleb