python 本地定时下载远程文件

本地定时下载远程服务器中的文件,下载完成后删除远程的文件

远程下载库paramiko
定时库apscheduler
话不多说,直接上代码

# coding=utf-8
import datetime

import paramiko  # paramiko模块,基于SSH用于连接远程服务器并执行相关操作
import os
import time
from apscheduler.schedulers.blocking import BlockingScheduler # 定时任务模块
from apscheduler.triggers.cron import CronTrigger
import sys, time

host = "0:0:0:0"  # sftp ip地址,改成自己的服务端地址
port = 0000  # sftp端口,改成自己的服务端口
username = "test"  # sftp用户名
password = "test"  # sftp密码
local = '/local/'  # 本地存储路径
remote = '/remote'  # ftp目标文件所在路径

def progress_bar(transferred, toBeTransferred, suffix=''):
    bar_len = 100
    filled_len = int(round(bar_len * transferred / float(toBeTransferred)))
    percents = round(100.0 * transferred / float(toBeTransferred), 1)
    bar = '\033[32;1m%s\033[0m' % '=' * filled_len + '-' * (bar_len - filled_len)
    sys.stdout.write('[%s] %s%s %s\r' % (bar, '\033[32;1m%s\033[0m' % percents, '%', suffix))
    sys.stdout.flush()
    # time.sleep(1)


def download(sftpconn):
    print(local)
    print(remote)
    try:     # 判断SFTP文件夹是否存在
        sftpconn.chdir(remote)
        print("exist")
    except IOError:
        print('SFTP内文件夹不存在!!!')
        return
    if not os.path.exists(local):
        os.makedirs(local)
    if os.path.isdir(local):  # 判断本地参数是目录还是文件
        for f in sftpconn.listdir(remote):  # 遍历远程目录
            print(f)
            if os.path.exists(local+f):
                local_size = os.path.getsize(os.path.join(local + f))
                remote_size = sftpconn.stat(os.path.join(remote + f)).st_size
                if local_size == remote_size:
                    #当下载完成之后,删除远程文件
                    print(local+f+'该文件已存在与服务器端文件大小相等!')
                    sftpconn.remove(remote + f)
                    print('远程文件'+remote + f + '删除完成!')
                    continue
            sftpconn.get(os.path.join(remote + f), os.path.join(local + f), callback=progress_bar)  # 下载目录中文件
            print(remote + f + '下载完成!')
            #

    # else:
    #     sftpconn.get(remotepath, localpath)  # 下载文件
    return


def download_dl():
    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+'开始执行短临数据下载定时任务:')
    utc = time.strftime('%Y%m%d', time.gmtime())
    print('当前世界时日期为' + utc)
    sf = paramiko.Transport((host, port))
    sf.connect(username=username, password=password)
    sftp = paramiko.SFTPClient.from_transport(sf)
    # dl_local = local + '01' + '/' + utc + '/'
    # dl_remote = '/' + '01' + '/' + utc + '/'
    download(sftp)
    sftp.close()



# 主函数

# 程序开始全部扫描下载一遍
download_dl()
scheduler = BlockingScheduler()
# 每10分钟执行下载
cron_hourly = CronTrigger(month='*', day='*', hour='*', minute='10', second='0')
scheduler.add_job(download_dl, cron_hourly)
scheduler.start()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中可以使用第三方库来实现远程监控电脑屏幕的功能,其中最常用的是`PIL`(Python Imaging Library)和`paramiko`(一个用于SSH连接的Python库)。以下是一个基本的步骤: 1. **安装必要的库**:首先,你需要安装`PIL`(如果还没有安装)和`paramiko`库,可以使用pip命令: ``` pip install pillow paramiko ``` 2. **设置SSH连接**:如果要从远程服务器访问,需要确保目标电脑开启了SSH服务,并且你可以通过用户名和密码或者密钥对成功登录。 3. **获取屏幕截图**:使用`paramiko`库创建一个SSH客户端,然后调用`invoke_shell()`方法获取一个shell会话。接着,你可以通过发送特定的命令(如`import os; os.system('import mss; sct = mss.mss(); img = sct.grab(sct.monitors)')`),利用`mss`库来截取屏幕截图。 4. **接收和保存截图**:在本地服务器上,创建一个文件接收来自远程服务器的截图数据,通常是一个字节流。然后,将接收到的数据写入文件,例如: ```python ssh.exec_command('import os; import io; img_data = io.BytesIO(); os.system("your_screenshot_command_here"); img_data.seek(0);', get_pty=True) local_file = open("received_screenshot.png", "wb") local_file.write(img_data.read()) local_file.close() ``` 5. **定期执行**:如果你想定期监控,可以将上述代码封装到一个定时任务或者循环中运行。 注意:这只是一个基础示例,实际操作可能需要处理更多的网络异常、权限问题以及安全考虑。另外,由于跨设备权限限制,这个方法并不适用于所有情况,比如在没有root权限的用户账户下。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值