【问题标题】:getting a files from remote path to local dir using sftp in python在python中使用sftp从远程路径获取文件到本地目录
【发布时间】:2014-06-26 09:46:14
【问题描述】:

我正在尝试从远程路径获取文件到我的本地目录。当我执行代码时出现错误。如下所述。

import paramiko
import SSHLibrary
from stat import S_ISDIR
server, username, password = ('Remote ID', 'root', 'root')
ssh = paramiko.SSHClient()
paramiko.util.log_to_file("ssh.log")
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server, username=username, password=password)
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('ls')
print "output", ssh_stdout.read() #Reading output of the executed command
error = ssh_stderr.read()
#Transfering files to and from the remote machine
sftp = ssh.open_sftp()
print sftp.getcwd()
print sftp.get_channel()
print sftp.listdir("/home")
sftp.get("/home","C:\\Users\\ShareM\\Desktop")  #---> facing problem here
sftp.close()
ssh.close()

错误:-

Traceback (most recent call last):
File "C:\Users\ShareM\Desktop\Automotive\devlopment\sshtesting\src\sshtest.py", line    36, in <module>
sftp.get("/home","C:\\Users\\ShareM\\Desktop")
File "build\bdist.win32\egg\paramiko\sftp_client.py", line 637, in get
IOError: [Errno 13] Permission denied: 'C:\\Users\\ShareM\\Desktop'

需要帮助。

【问题讨论】:

    标签: python-2.7 sftp paramiko


    【解决方案1】:

    问题在于sftp.get() 旨在传输单个文件而不是目录。因此,要下载整个目录,您应该获取其中的文件列表并分别下载:

    def download_dir(remote_dir, local_dir):
        import os
        os.path.exists(local_dir) or os.makedirs(local_dir)
        dir_items = sftp.listdir_attr(remote_dir)
        for item in dir_items:
            # assuming the local system is Windows and the remote system is Linux
            # os.path.join won't help here, so construct remote_path manually
            remote_path = remote_dir + '/' + item.filename         
            local_path = os.path.join(local_dir, item.filename)
            if S_ISDIR(item.st_mode):
                download_dir(remote_path, local_path)
            else:
                sftp.get(remote_path, local_path)
    
    
    download_dir("/home","C:\\Users\\ShareM\\Desktop")
    

    【讨论】:

    • 所以如果我们有一个充满不同文件和文件夹的目录,我们需要将它们全部列出并在我们的本地路径中创建它们。老兄!
    • S_ISDIR(item.st_mode) 是什么意思??
    • from stat import S_ISDIR 添加这个导入来运行这个方法。
    • @praveen : 这意味着它是一个目录。
    • 此外,将目录列表/统计信息与实际文件传输分开也很重要。某些 FTP 服务器会意外转储连接或操作过多。
    猜你喜欢
    • 2021-08-04
    • 2010-10-31
    • 1970-01-01
    • 2023-04-05
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    相关资源
    最近更新 更多