Copiando arquivos com Python

Posted on qua 14 fevereiro 2018 in Python • 2 min read

Nesse post ensinei a criar um script basico para o envio de emails usando python.

Vamos agora aprender a coletar os logs (ou arquivos que voce desejar) para anexar ao script de envio de emails.

Lembrando que a versão do Python que iremos trabalhar é a 3.6.

Antes de tudo vamos instalar o modulo Paramiko

$ pip3.6 install paramiko

Vamos inserir os modulos

import shutil
import paramiko

Começamos importando os modulos necessarios para acessar e copiar os arquivos. Os modulos que vamos utilizar são Paramiko e o shutil.

Esse ultimo não será necessario a instalação pois é um dos modulos padrões do Python

Inicialmente vamos abrir a conexão com servidor, passando por parametros as informações do host

Podemos ver que usamos a porta padrão, porem não esqueça de alterar caso seja diferente.

import shutil
import paramiko

def copyFile(HostIp):
    # Abre a conexão
    s = paramiko.SSHClient()
    # Insere a chave do servidor remoto como confiavel
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # Carrega as chaves já inseridas
    s.load_system_host_keys()
    # Efetua a conexão pela porta 22 com o usuario USER
    s.connect(HostIp, port = 22, username = "USER")

Agora vamos setar as variáveis, inserindo quais arquivos copiar

    # Nome do arquivo a ser copiado
    files = ['NAME OF FILE']
    # Caminho do arquivo, podemos setar diversos locais
    remote_images_path = '/path/remote/of/file/'
    # Caminho onde sera salvo o arquivo
    local_path = '/path/local/of/destiny/'

Vamos precisar de um for para copiar os arquivo(s)

    # Abre a conexâo ftp
    sftp = s.open_sftp()
    for file in files:
        # Aqui setamos o caminho e o arquivo a ser copiado
        file_remote = remote_images_path + file
        # Aqui setamos o caminho local
        file_local = local_path + file

        # Exibe o caminho remoto sendo copiado para o caminho local
        print(file_remote + ' >>>'  + file_local)
        # Efetua a copia
        sftp.get(file_remote, file_local)

        # Fecha as conexões
        sftp.close()
        s.close()
O script final ficará dessa forma
import shutil
import paramiko

def copyFile(HostIp):
    # Abre a conexão
    s = paramiko.SSHClient()
    # Insere a chave do servidor remoto como confiavel
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # Carrega as chaves já inseridas
    s.load_system_host_keys()
    # Efetua a conexão pela porta 22 com o usuario USER
    s.connect(HostIp, port = 22, username = "USER")

    # Nome do arquivo a ser copiado
    files = ['NAME OF FILE']
    # Caminho do arquivo, podemos setar diversos locais
    remote_images_path = '/path/remote/of/file/'
    # Caminho onde sera salvo o arquivo
    local_path = '/path/local/of/destiny/'

    # Abre a conexão ftp
    sftp = s.open_sftp()
    for file in files:
        # Aqui setamos o caminho e o arquivo a ser copiado
        file_remote = remote_images_path + file
        # Aqui setamos o caminho local
        file_local = local_path + file

        # Exibe o caminho remoto sendo copiado para o caminho local
        print(file_remote + ' >>>'  + file_local)
        # Efetua a copia
        sftp.get(file_remote, file_local)

        # Fecha as conexões
        sftp.close()
        s.close()

Simples Assim 😆

Qualquer duvida ou algo pra complementar deixe seu comentario.

Fontes:

– http://docs.paramiko.org/en/2.4/

– https://docs.python.org/3.6/library/shutil.html