欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 通过SFTP 实现文件的批量上传

程序员文章站 2023-01-05 22:03:57
文章目录Python - Python 通过SFTP 进行文件的批量上传1、引用之前的 auto_template,并增加上传目录的方法2、主要代码3、运行代码4、运行结果Python - Python 通过SFTP 进行文件的批量上传1、引用之前的 auto_template,并增加上传目录的方法import paramikoimport timefrom dir import dir_utils# 读取命令执行后的终端返回def read_unicode(unicode):...

Python - Python 通过SFTP 进行文件的批量上传


1、引用之前的 auto_template,并增加上传目录的方法

import paramiko
import time
from dir import dir_utils


# 读取命令执行后的终端返回
def read_unicode(unicode):
    return str(unicode, 'utf-8').split('\n')


# 执行命令
def command(ssh_config, cmd, result_print=None):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=ssh_config.hostname, port=ssh_config.port, username=ssh_config.username,
                password=ssh_config.password)
    print(ssh_config.hostname + '@' + ssh_config.username, ': ', cmd)
    stdin, stdout, stderr = ssh.exec_command(cmd)
    result = stdout.read()
    if result_print:
        lines = read_unicode(result)
        for line in lines:
            print(line)
    ssh.close()


# 上传目录和文件
def upload_dirs(ssh_config, local, server):
    client, transport = sftp(ssh_config)
    rel_dirs, rel_filenames = dir_utils.foreach(local)
    # 创建根目录
    path_cmd = dir_utils.linux_path_cmd(server)
    command(ssh_config, path_cmd)
    # 创建子目录
    for path in rel_dirs:
        server_dir = server + path.replace(local, '')
        path_cmd = dir_utils.linux_path_cmd(server_dir)
        command(ssh_config, path_cmd)
    # 上传文件
    for file in rel_filenames:
        server_path = server + file.replace(local, '')
        print('FILE UPLOAD ↑↑↑ LOCAL:', file, ' -> SERVER: ', server_path)
        client.put(file, server_path)
    transport.close()


# 上传指定文件
def upload_new(ssh_config, local, server):
    client, transport = sftp(ssh_config)
    client.put(local, server)
    transport.close()


def sftp(ssh_config):
    transport = paramiko.Transport(ssh_config.hostname, ssh_config.port)
    transport.connect(username=ssh_config.username, password=ssh_config.password)
    client = paramiko.SFTPClient.from_transport(transport)
    return client, transport


def auto_deploy(deploy_config, ssh_config):
    print('Step 1 : stop application')
    command(ssh_config, deploy_config.stop_cmd)
    print('wait for application stop')
    time.sleep(2)
    print('Step 2 : delete old application file')
    command(ssh_config, deploy_config.delete_cmd)
    print('Step 3 : upload new application file to server')
    print('wait for application upload')
    upload_new(ssh_config, deploy_config.local, deploy_config.server)
    print('upload completed')
    print('Step 4 : run application')
    time.sleep(2)
    command(ssh_config, deploy_config.start_cmd)
    print('deploy application completed')

2、主要代码

# 上传目录和文件
def upload_dirs(ssh_config, local, server):
    client, transport = sftp(ssh_config)
    rel_dirs, rel_filenames = dir_utils.foreach(local)
    # 创建根目录
    path_cmd = dir_utils.linux_path_cmd(server)
    command(ssh_config, path_cmd)
    # 创建子目录
    for path in rel_dirs:
        server_dir = server + path.replace(local, '')
        path_cmd = dir_utils.linux_path_cmd(server_dir)
        command(ssh_config, path_cmd)
    # 上传文件
    for file in rel_filenames:
        server_path = server + file.replace(local, '')
        print('FILE UPLOAD ↑↑↑ LOCAL:', file, ' -> SERVER: ', server_path)
        client.put(file, server_path)
    transport.close()

3、运行代码

from auto_deploy.nsbd import ssh_config
from auto_deploy import auto_template

if __name__ == '__main__':
    server_path = '/tmp/lllllll/'
    local_path = 'C:/Users/A-PC/Desktop/123/'
    auto_template.command(ssh_config, 'rm -rf ' + server_path)
    auto_template.upload_dirs(ssh_config, local_path, server_path)

4、运行结果

47.114.154.255@root :  rm -rf /tmp/lllllll/
47.114.154.255@root :  [ ! -d "/tmp/lllllll/" ] && mkdir /tmp/lllllll/
47.114.154.255@root :  [ ! -d "/tmp/lllllll/4444777" ] && mkdir /tmp/lllllll/4444777
47.114.154.255@root :  [ ! -d "/tmp/lllllll/5555" ] && mkdir /tmp/lllllll/5555
47.114.154.255@root :  [ ! -d "/tmp/lllllll/66666" ] && mkdir /tmp/lllllll/66666
47.114.154.255@root :  [ ! -d "/tmp/lllllll/4444777/212554" ] && mkdir /tmp/lllllll/4444777/212554
47.114.154.255@root :  [ ! -d "/tmp/lllllll/4444777/2222" ] && mkdir /tmp/lllllll/4444777/2222
FILE UPLOAD ↑↑↑ LOCAL: C:/Users/A-PC/Desktop/123/123.txt  -> SERVER:  /tmp/lllllll/123.txt
FILE UPLOAD ↑↑↑ LOCAL: C:/Users/A-PC/Desktop/123/1234567.txt  -> SERVER:  /tmp/lllllll/1234567.txt
FILE UPLOAD ↑↑↑ LOCAL: C:/Users/A-PC/Desktop/123/4444777/324324324.txt  -> SERVER:  /tmp/lllllll/4444777/324324324.txt
FILE UPLOAD ↑↑↑ LOCAL: C:/Users/A-PC/Desktop/123/4444777/gdfsgdgf.txt  -> SERVER:  /tmp/lllllll/4444777/gdfsgdgf.txt
FILE UPLOAD ↑↑↑ LOCAL: C:/Users/A-PC/Desktop/123/4444777/212554/1551.txt  -> SERVER:  /tmp/lllllll/4444777/212554/1551.txt
FILE UPLOAD ↑↑↑ LOCAL: C:/Users/A-PC/Desktop/123/4444777/2222/545.txt  -> SERVER:  /tmp/lllllll/4444777/2222/545.txt
FILE UPLOAD ↑↑↑ LOCAL: C:/Users/A-PC/Desktop/123/5555/4324.txt  -> SERVER:  /tmp/lllllll/5555/4324.txt
FILE UPLOAD ↑↑↑ LOCAL: C:/Users/A-PC/Desktop/123/66666/54545.txt  -> SERVER:  /tmp/lllllll/66666/54545.txt

本文地址:https://blog.csdn.net/qq_15071263/article/details/107085213