zoukankan      html  css  js  c++  java
  • paramiko下载文件报错:PermissionError: [Errno 13] Permission denied:

    paramiko从服务器下载文件,代码如下:

    import paramiko
    import os
    from stat import S_ISDIR as isdir
    
    
    def down_from_remote(sftp_obj, remote_dir_name, local_dir_name):
        """远程下载文件"""
        remote_file = sftp_obj.stat(remote_dir_name)
        if isdir(remote_file.st_mode):
            # 文件夹,不能直接下载,需要继续循环
            check_local_dir(local_dir_name)
            print('开始下载文件夹:' + remote_dir_name)
            for remote_file_name in sftp.listdir(remote_dir_name):
                sub_remote = os.path.join(remote_dir_name, remote_file_name)
                sub_remote = sub_remote.replace('\', '/')
                sub_local = os.path.join(local_dir_name, remote_file_name)
                sub_local = sub_local.replace('\', '/')
                down_from_remote(sftp_obj, sub_remote, sub_local)
        else:
            # 文件,直接下载
            print('开始下载文件:' + remote_dir_name)
            sftp.get(remote_dir_name, local_dir_name)
    
    
    def check_local_dir(local_dir_name):
        """本地文件夹是否存在,不存在则创建"""
        if not os.path.exists(local_dir_name):
            os.makedirs(local_dir_name)
    
    
    if __name__ == "__main__":
        """程序主入口"""
        # 服务器连接信息
        host_name = '192.103.51.11'
        user_name = 'test'
        password = '123456'
        port = 22
        # 远程文件路径(需要绝对路径)
        remote_dir = '/home/test/syslogin.log'
        # 本地文件存放路径(绝对路径或者相对路径都可以)
        local_dir = r'D:mypython	est'
    
        # 连接远程服务器
        t = paramiko.Transport((host_name, port))
        t.connect(username=user_name, password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
    
        # 远程文件开始下载
        down_from_remote(sftp, remote_dir, local_dir)
    
        # 关闭连接
        t.close()

    报错:

    PermissionError: [Errno 13] Permission denied:

    查看官方文档

    get(remotepath, localpath=None, callback=None, preserve_mtime=False)

    注意:这里的remotepath和localpath为:“文件所在目录 + '/' + 文件名”这样形式的完整的文件路径,而不是只有文件的目录

    put(localpath, remotepath=None, callback=None, confirm=True, preserve_mtime=False)

    注意:这里的remotepath和localpath为:“文件所在目录 + '/' + 文件名” 完整的文件路径,不是只有文件的目录

    解决:

    local_dir = r'D:mypython	estsyslogin.log'


  • 相关阅读:
    redis
    Ubuntu 用VSFTP搭建FTP服务器
    ADO.NET中高效地使用数据库连接
    类型后面加问号 int?
    system.data.sqlclient.sqlexception:timeout expired
    BackgroundWorker超级详细的用法
    异步调用WCF服务,并将数据填入GridLookUpEdit中
    linq to entity报"不允许启动新事务,因为有其他线程正在该会话中运行."错误解决方法
    sql2005 数据库备份 对于服务器失败
    调用WCF服务返回list集合时出错的解决方法
  • 原文地址:https://www.cnblogs.com/mingfan/p/13138448.html
Copyright © 2011-2022 走看看