python - 任务计划程序批处理文件启动 Python 脚本并且随机不产生输出 ~20% 的时间
问题描述
每天大约在上午 9:30 到 10:30 之间的某个时间在公共网站上发布一个 CSV。我有一个 python 脚本,它每 30 秒抓取一次这个网站,然后在发布新的 CSV 时发送一封电子邮件。(例如: http: //mis.nyiso.com/public/csv/damlbmp/20191119damlbmp_zone.csv)
当我从 Spyder 手动运行它时,这个 python 脚本 100% 的工作,但由于某种原因,当我使用任务调度程序调用批处理文件时不一致。任务调度程序总是会调用批处理文件(命令提示符窗口会按时弹出),但有时不会生成电子邮件。它似乎是完全随机的,并不取决于 CSV 文件的发布时间(例如,如果 CSV 是在接近 10:00 而不是 9:30 发布的)。
我的第一个想法可能是我的计算机同时运行了太多其他任务,并且可能是内存错误或并发 python 会话错误,但是当我不使用计算机时,电子邮件通常在周末失败。
更奇怪的是,我为两个不同的网站设置了这个流程(一个在 9:30 发布,一个在 12:00 pm 发布)并且通常会生成一封电子邮件,而另一封不会。
Python Script 抓取网站并发送电子邮件:
import requests, smtplib, datetime, pandas as pd, time
x = datetime.datetime.now() + datetime.timedelta(days=1)
file_date = (x.strftime("%Y%m%d"))
urlFile = file_date +"damlbmp_zone"
Filename = "/Users/renoira/Python/Data/NY_Clears.csv"
url = 'http://mis.nyiso.com/public/csv/damlbmp/%s.csv'%(urlFile)
while True:
try:
print("Try to execute commands")
if requests.get(url).status_code == 404:
print("File not ready")
raise Exception("Timeout")
print("Email Sending")
break
except:
print("Timeout: sleep for 30 seconds and try again")
time.sleep(30)
url = 'http://mis.nyiso.com/public/csv/damlbmp/%s.csv'%(urlFile)
r = requests.get(url)
with open(Filename, 'wb') as f:
f.write(r.content)
nyClears = pd.read_csv(Filename)
###Formatting email, create dataframe then html1 = df.render() etc
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
#from email.mime.image import MIMEImage
def send_email():
#email body and html table summary
send_email()
任务调度程序调用的批处理文件:
cd /d %~dp0
"C:\ProgramData\Anaconda3\python.exe" "C:\Users\renoira\Python\Daily Model Runs\NY Price Scrape.py"
概括:
我有一个 python 脚本,它每 30 秒抓取一个网站,然后在网站更新时发送一封电子邮件。当我在 Spyder 中运行它时,它 100% 的时间有效,但是当我使用任务调度程序调用批处理文件时,它有时只有效。
解决方案
推荐阅读
- angular - 自 Angular 8 更新以来,无法导入 Angular 材质的特定入口点
- postgresql - 如何授予对整个数据库的选择权限?(不是模式)
- reactjs - React,如何告诉一个父组件所有子组件都完成了更新?
- node.js - Node.js - 仅显示 JSON 响应中的最后一个元素
- c - stdout 和 stderr 纠缠不清?
- soap - 在 WSO2 ESB 中调用代理服务时找不到操作的端点引用 (EPR)
- excel - 在excel单元格中定义数组并在excel数组公式中使用该单元格
- python - 将下一行附加到上一行
- nginx - 入口控制器不处理流量
- python - 数据框列的正则表达式