资讯专栏INFORMATION COLUMN

Python通过paramiko从远处服务器下载文件资源到本地

Anonymous1 / 2760人阅读

为什么要用Python脚本下载以及基本介绍

经常会有人需要从远程服务器下载一些文件资源,下载个别小文件可以直接用sz等命令,但是,需要下载一个文件夹呢?sz就不行了,这时候当然可以先压缩文件夹,然后下载,这样也是可以的,只要文件不是很大,那么,有没有其他办法下载文件夹呢?办法当然是有的,就是写Python脚本,然后通过paramiko模块就可以从远程传输下载文件夹到本地了,是不是很方便呢……

paramiko模块提供了ssh及sftp进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要先进行安装,我们这里主要利用sftp进行下载传输文件

就像下图中的运行,可以一个一个的循环下载文件

使用时候的基本配置

下面的这些信息需要自己配置一下,即初始化一些参数,包括服务器信息以及远程文件和本地文件的存放路径配置

# 服务器连接信息
host_name = "172.0.0.1"
user_name = "root"
password = "root"
port = 22
# 远程文件路径(需要绝对路径)
remote_dir = "/data/nfs/zdlh/pdf/2018/07/31"
# 本地文件存放路径(绝对路径或者相对路径都可以)
local_dir = "file_download/"
实现源码
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
通过paramiko从远处服务器下载文件资源到本地
author: gxcuizy
time: 2018-08-01
"""

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 = "172.17.2.18"
    user_name = "dev"
    password = "dev@zdlh"
    port = 22
    # 远程文件路径(需要绝对路径)
    remote_dir = "/data/nfs/zdlh/pdf/2018/07/31"
    # 本地文件存放路径(绝对路径或者相对路径都可以)
    local_dir = "file_download/"

    # 连接远程服务器
    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()
结束语

在Python中,可以很好地利用Parmmiko的sftp完成文件传输操作。大家有什么疑问或者想法,可以留言或者联系我。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42128.html

相关文章

  • python大佬养成计划----paramiko实现SSH

    摘要:模块为的缩写,由的网络小组所制定为建立在应用层基础上的安全协议。是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用该模块,可以方便的进行连接和协议进行文件传输。 paramiko模块 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专...

    gghyoo 评论0 收藏0
  • SSH连接与自动化部署工具paramiko与Fabric

    摘要:是基于实现的远程安全连接,支持认证及密钥方法。利用函数发送到,通过函数获取回显。如下全局属性设定对象的作用是定义的全局设定,支持多个属性及自定义属性。相比确实简化了不少。出现异常时,发出警告,继续执行,不要终止。 paramiko paramiko是基于Python实现的SSH2远程安全连接,支持认证及密钥方法。可以实现远程命令执行,文件传输,中间SSH代理等功能,相对于Pexpect...

    ermaoL 评论0 收藏0
  • pythonparamiko模块的使用

    摘要:是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,和内部的远程管理就是使用的来现实。 paramiko paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。 1、下载安装 pycrypto,由于 paramiko 模块内部...

    Cobub 评论0 收藏0
  • 如何通过Telnet和SSH远程监控主机

    摘要:子程序执行将在新进程中完成。要在上执行子程序,该类将使用该函数。如果是字符串,则字符串指定要通过执行的命令。如果是任何其他负值,则表示完全缓冲。它用于通过网络进行系统管理和应用程序部署。 showImg(https://segmentfault.com/img/remote/1460000018833620); 来源 | 愿码(ChainDesk.CN)内容编辑 愿码Slogan |...

    BothEyes1993 评论0 收藏0

发表评论

0条评论

Anonymous1

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<