如何解决每天在特定时间自动运行的脚本问题
我希望以后每天早上 8 点自动运行一个 python 文件。我尝试在 Windows 中使用 second answer here 中指出的库 schedule
。
import schedule
import time
def query_fun(t):
print('Do a bunch of things')
print("I'm working...",t)
df.to_csv('C:/Documents/Query_output.csv',encoding='utf-8')
schedule.every().day.at("08:00").do(query_fun,'It is 08:00')
while True:
schedule.run_pending()
time.sleep(60) # wait one minute
但是早上 8 点已经过去了,csv 文件还没有更新,而且脚本看起来不像我想要的那样运行。
编辑:基于 this,我使用 pythonw.exe
在命令行中运行脚本:C:\Program Files\Python3.7>pythonw.exe daily_query.py
但脚本未按预期运行.
解决方法
您通过注释掉了脚本的关键部分。脚本如何神奇地在早上 8 点起床做某事?关键是始终保持运行并使用 schedule
库提供的机制在正确的时间触发(在 D 天的时间 T 运行任何挂起的作业)。您现在所做的只是声明方法并退出而不做任何事情。
关键是让脚本在后台运行,并通过将当前时间与指定时间匹配来触发函数,根据您的逻辑运行任何挂起的分配作业。你在后台运行你的脚本,直到早上 8 点才忘记它:
nohup python MyScheduledProgram.py &
nohup
将确保您的终端不会从程序中打印任何输出。不过,您可以查看 nohup.out
的输出。
Here 你可以很容易地看到脚本做了什么:
schedule.every().day.at("08:00").do(query_fun,'It is 08:00')
告诉调度程序在上午 8 点运行该函数。 但图书馆的另一部分是这个:
while True:
schedule.run_pending()
time.sleep(60) # wait one minute
这部分检查它是否应该启动一个脚本,然后等待 60 秒,然后再次检查。
编辑:
这个问题与一台 Windows 机器有关,因此我的回答在这里没有意义。
如果你使用的是 linux 机器,你应该考虑使用 crontabs:
打开终端并输入 crontab -e
在你选择了你想要的编辑器(让我们以 nano 为例)后,它会打开一个列表,你可以在其中添加各种条目
只需添加:
0 8 * * * /usr/bin/python3 /home/path/to/skript.py
然后用STRG + O保存并用STRG + X退出nano
脚本每天早上8点运行,测试一下命令
/usr/bin/python3 /home/path/to/skript.py
确保脚本不会产生错误
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。