如何实现程序每24小时自动从服务器下载文件,移除手动日期输入环节
实现无需手动输入、每日自动下载服务器文件的方案
看起来你想把需要手动输入日期的下载脚本改成全自动每日运行的版本,我来给你一步步拆解怎么实现:
第一步:用代码自动生成日期参数
原来的脚本依赖用户输入start_date和end_date,现在我们可以用Python的datetime模块自动生成符合DD-MM-YEAR格式的日期。这里分两种常见使用场景:
场景1:每日下载前一天的完整数据(比如今天下载昨天00:00到23:59的数据)
用timedelta计算前一天的日期,再格式化为要求的字符串:from datetime import datetime, timedelta # 获取前一天的日期 yesterday = datetime.now() - timedelta(days=1) # 格式化为DD-MM-YEAR格式 date_str = yesterday.strftime("%d-%m-%Y") # 起止日期都设为前一天(适配接口单日范围的需求) start_date = date_str end_date = date_str场景2:下载最近24小时的数据
如果需要的是当前时间倒推24小时的时间段,分别计算起止时间:from datetime import datetime, timedelta # 注意:先确认接口是否支持带时间的格式,若只需要日期则用"%d-%m-%Y" end_date = datetime.now().strftime("%d-%m-%Y %H:%M:%S") start_date = (datetime.now() - timedelta(hours=24)).strftime("%d-%m-%Y %H:%M:%S")
提示:一定要确认服务器接口对日期参数的具体要求,比如是否需要包含时间部分,避免参数格式错误导致请求失败。
第二步:实现每日自动执行
这里有两种可靠的方案,你可以根据自己的环境选择:
方案A:用Python的schedule库实现定时(纯Python环境友好)
首先安装schedule库:
pip install schedule
然后修改脚本,加入定时任务逻辑:
import urllib.request import json import pandas as pd from datetime import datetime, timedelta import schedule import time def download_file(): # 自动生成日期参数(这里用前一天的单日数据为例) yesterday = datetime.now() - timedelta(days=1) date_str = yesterday.strftime("%d-%m-%Y") start_date = date_str end_date = date_str # 注意:替换为你实际的elemId值,原代码中缺失这个变量 variable_ID = "your_actual_element_id" link = f'https://np02-slow-control.web.ch/np02-slow-control/app/php-db-conn/histogramrange.conn.php?elemId={variable_ID}&start={start_date}&end={end_date}' # 执行下载并处理数据(这里以保存为CSV为例) try: response = urllib.request.urlopen(link) data = json.loads(response.read().decode()) df = pd.DataFrame(data) df.to_csv(f'downloaded_data_{date_str}.csv', index=False) print(f"✅ 成功下载{date_str}的数据") except Exception as e: print(f"❌ 下载出错:{str(e)}") # 设置每天凌晨2点执行下载任务 schedule.every().day.at("02:00").do(download_file) # 保持脚本后台运行,定时检查任务 while True: schedule.run_pending() time.sleep(60) # 每分钟检查一次任务状态
方案B:用系统定时任务(更稳定,推荐生产环境使用)
如果不想让Python脚本一直后台运行,推荐用系统自带的定时任务工具,更稳定且占用资源少:
Linux/macOS:使用
cron- 把修改好的脚本保存为
auto_download.py(确保脚本已实现自动生成日期,无输入交互) - 终端输入
crontab -e编辑定时任务 - 添加一行配置,设置每天凌晨2点执行:
提示:用0 2 * * * /usr/bin/python3 /absolute/path/to/auto_download.pywhich python3可以查看你的Python实际路径,替换掉示例中的路径。
- 把修改好的脚本保存为
Windows:使用「任务计划程序」
- 打开「任务计划程序」,点击「创建基本任务」
- 设置触发器为「每天」,选择执行时间(比如凌晨2点)
- 设置操作为「启动程序」,程序选择你的Python.exe路径,添加参数为脚本的绝对路径(比如
D:\scripts\auto_download.py)
额外注意事项
- 务必补充
variable_ID的实际值,原代码中缺失这个关键变量 - 测试时可以先把定时时间改成几分钟后,快速验证脚本是否能正常运行
- 如果服务器需要身份验证,可能需要在
urllib.request中添加请求头或认证逻辑 - 可以添加日志文件记录,方便后续排查下载失败的问题
内容的提问来源于stack exchange,提问作者user191762
相关产品推荐
相关产品推荐

