windows 每天在特定时间自动运行的脚本的问题

7z5jn7bk  于 2023-11-21  发布在  Windows
关注(0)|答案(3)|浏览(193)

我想让一个python文件在每天早上8点自动运行。我试着在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,但脚本没有按预期运行。

bcs8qyzn

bcs8qyzn1#

你通过注解去掉了脚本的关键部分。脚本是如何神奇地在早上8点“起床”做一些事情的?关键是始终保持它运行,并使用schedule库提供的机制在正确的时间触发(在第D天的时间T运行任何挂起的作业)。你现在所做的只是声明方法并退出,什么都不做。
关键是保持脚本在后台运行,并通过将当前时间与指定时间匹配来触发函数,按照您的逻辑运行任何挂起的分配作业。您在后台运行脚本,直到上午8点才忘记它:

nohup python MyScheduledProgram.py &

字符串
nohup会确保您的终端不会从程序中获得任何输出。不过您可以查看nohup.out的输出。

pkln4tw6

pkln4tw62#

在windows机器上,你可以使用“任务管理”来重复运行一个python脚本:
1.在开始菜单中搜索“任务栏”并将其打开。
1.现在在“操作”菜单中单击“创建任务”。
1.在“常规”选项卡中,给予一个名称和描述。
1.在“操作”选项卡中,选择“启动程序”作为操作类型。
1.在“Program/script”字段中,输入Python可执行文件的路径(例如,C:\Python39\python.exe)。您可以通过在CMD或PowerShell中键入“Where.exe python”来查找Python可执行文件的路径
1.在“Add arguments”字段中myscript.py
1.然后在“开始于”字段中,输入脚本的路径(例如,C:\Users\username\Documents)。
1.单击“确定”以保存您的操作。
1.现在你可以轻松地进入“触发器”选项卡,点击新按钮,然后按照你认为合适的方式安排你的任务:每天,每小时,甚至“启动时”或“登录时”。
使用此方法,您可以从“.py”文件中完全删除“schedule module”及其相关代码。

xzlaal3s

xzlaal3s3#

Here你可以很容易地看到skript做了什么:

schedule.every().day.at("08:00").do(query_fun, 'It is 08:00')

字符串
告诉scheduler在上午8点运行函数。但库的另一部分是:

while True:
schedule.run_pending()
time.sleep(60) # wait one minute


这部分检查它是否应该启动一个skript,然后等待60秒,并再次检查。
编辑:
这个问题与Windows机器有关,因此我的回答在这里没有意义。
如果你是在Linux机器上,你应该考虑使用crontabs:
打开一个终端,键入crontab -e
在你选择了你想要的编辑器之后(让我们使用nano),它会打开一个列表,你可以在其中添加各种条目
只需添加:

0 8 * * * /usr/bin/python3 /home/path/to/skript.py


然后使用STRG + O保存,并使用STRG + X退出nano
skript将在每天早上8点运行,只需测试命令

/usr/bin/python3 /home/path/to/skript.py


以确保脚本不会产生错误

相关问题