import stat
import datetime
import paramiko
import os
import time
import sched
from common.log_utils import get_logger
logging = get_logger(__name__)
transport = paramiko.Transport(('xx.xx.xx.xx', xx))
transport.connect(username='用户名', password='密码')
sftp = paramiko.SFTPClient.from_transport(transport)
def getRemoteFiles(remoteDir):
filesAttr = sftp.listdir_attr(remoteDir)
try:
for fileAttr in filesAttr:
file_dt = datetime.datetime.fromtimestamp(
fileAttr.st_mtime).strftime('%Y%m%d')
if stat.S_ISDIR(fileAttr.st_mode):
son_remoteDir = remoteDir + '/' + filesAttr.filename
yield from getRemoteFiles(son_remoteDir)
else:
yield remoteDir + '/' + fileAttr.filename
except Exception as e:
logging.info('getAllFilePath exception:{}'.format(e))
def download_file(localDir, remoteDir):
dt_start = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
logging.info('................. {}开始下载!................\n'.format(dt_start))
if not os.path.exists(localDir):
os.makedirs(localDir)
files = getRemoteFiles(remoteDir)
for file in files:
remoteFileName = file
localpathName = os.path.join(localDir, dt_start)
if not os.path.exists(localpathName):
os.makedirs(localpathName)
localFileName = os.path.join(localpathName, file.split('/')[-1])
try:
sftp.get(remoteFileName, localFileName)
logging.info('sftp服务器 {} 下载成功!\n 该文件保存本地位置是{} ! \n'.format(
remoteFileName, localFileName))
except Exception as e:
logging.info('{}下载出错!{}:\n'.format(remoteFileName, e))
sftp.close()
logging.info('..................... {} 下载完成!..................'.format(dt_start))
scheduler = sched.scheduler(time.time, time.sleep)
def run_program():
logging.info('Running....')
download_file(r"D:\me\data", "服务器中文件夹地址")
def schedule_program(s):
scheduler.enter(s * 60, 1, run_program, ())
scheduler.run()
schedule_program(0)
while True:
schedule_program(5)