首页 > 解决方案 > 任务计划程序批处理文件启动 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% 的时间有效,但是当我使用任务调度程序调用批处理文件时,它有时只有效。

标签: pythonbatch-file

解决方案


推荐阅读