Esta es una breve modificación a uno de los scripts creados con anterioridad y que consiste en enviar un archivo por sftp. La necesidad en concreto consistía en comparar ambos servidores local y remoto y validar qué archivo faltaba en el remoto que estuviera en el local para proceder a enviarlo y mantener el remoto actualizado.
Este script se guarda con el nombre que quieras, le das permiso de ejecución y lo agregas en un crontab.
Este script se guarda con el nombre que quieras, le das permiso de ejecución y lo agregas en un crontab.
import pysftp
import os
# Cambiar por la ruta donde se generan los archivos (Amsterdam)
servidor_local = os.listdir(r'C:\proyecto\archivos')
#print servidor_local
# Cambiar por una ruta en Amsterdam, puede ser /tmp/res
os.remove(r"c:\proyecto\res\archivos.txt")
for archivos in servidor_local:
# Cambiar por '/tmp/res/archivos.txt','a'
local = open(r"c:\proyecto\res\archivos.txt",'a')
print 'Archivo local: '+archivos
local.write(str(archivos)+'\n')
local.close()
# Cambiar por /tmp/res/remoto.txt
os.remove(r"c:\proyecto\res\remoto.txt")
with pysftp.Connection('servidor_remoto.com', username='usuario', password='clave') as sftp:
# Cambiar por la ruta donde quedan los archivos en el servidor remoto
with sftp.cd('/tmp'):
f = sftp.listdir()
for files in f:
# '/tmp/res/remoto','a'
remoto = open(r"c:\proyecto\res\remoto.txt",'a')
print 'Archivos remotos: '+str(f)
remoto.write(str(files)+'\n')
remoto.close()
# Comparo archivo local con remoto
# /tmp/res/pendiente.txt=0:
os.remove(r"c:\proyecto\res\pendiente.txt")
print i,' Existe \n'
else:
pendiente = open(r"c:\proyecto\res\pendiente.txt",'a')
print 'Archivo pendient: '+i
pendiente.write(str(i)+'\n')
directorio = os.chdir(r"C:\proyecto\archivos")
print 'Directorio actual: '+os.getcwd()
subir=i.split("\n",1)
# Envio el archivo faltante
ith pysftp.Connection('servidor_remoto.com', username='usuario', password='clave') as sftp:
sftp.cd('/tmp')
sftp.put(str(subir[0]))
pendiente.close()
Comentarios