让python调度脚本在Windows上运行

问题描述 投票:0回答:1

比如说我有一个这样的python脚本。

from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler

sched = BackgroundScheduler()

def SchedulerTest():
    file1 = open("C:/Stuff/Stuff2/SchedTest.txt","a") 
    L = [str(datetime.now()) + ' | Testing this scheduler.' + '\n']
    print(L)
    file1.writelines(L)
    file1.close()

sched.add_job(SchedulerTest, 'interval', seconds=15, start_date="2020-04-24 07:30:00", end_date="2021-01-01 10:59:00", id='id_SchedulerTest')

sched.start()

保存在这个目录下一个叫SchedTest.py的文件里。C: \Stuff\Stuff2\along with a blank text file called SchedTest. txt.

只要我的 Jupyter 笔记本处于加载状态,这个过程就会像预期的那样工作。

我如何在我的Windows PC上运行该进程并保持其运行,而不通过我的Anaconda Navigator加载的Jupyter笔记本运行脚本?

下面的似乎不成功,因为有一个空的SchedTest.txt文件为证,虽然其中任何一个都没有弹出错误信息。 1. 制作一个名为SchedTest_start.cmd的文件,内容如下,然后双击它。

echo "Starting my Scheduler Task"
call "C:\ProgramData\Anaconda3\python.exe" "C:\Stuff\Stuff2\SchedTest.py"
pause

2. 打开cmd并输入python C:\Stuff\Stuff2\SchedTest.py 3.打开cmd并输入pythonw C:\Stuff\Stuff2\SchedTest.py 4.打开cmd并输入conda run C:\Stuff\Stuff2\SchedTest.

from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

def SchedulerTest():
    file1 = open("C:/Stuff/Stuff2/bl/SchedTest.txt","a") 
    L = [str(datetime.now()) + ' | Testing this scheduler.' + '\n']
    print(L)
    file1.writelines(L)
    file1.close()

sched.add_job(SchedulerTest, 'interval', seconds=15, start_date="2020-04-24 07:30:00", end_date="2021-01-01 10:59:00", id='id_SchedulerTest')

sched.start()

2. 制作一个名为SchedTest_start.cmd的文件,内容如下,然后双击。

click it:<br>
echo "Starting my Scheduler Task"
call "C:\ProgramData\Anaconda3\python.exe" "C:\Stuff\Stuff2\SchedTest.py"
pause
python apscheduler
1个回答
1
投票

假设你的脚本是在 C:\Users\YOUR_NAME\project 而你已经有了 virtualenv (venv)下的项目文件夹。

换句话说,你的项目文件夹看起来像这样。

. 

├── project

├── venv

├──  your_script.py

└──  ... (other files)

你要做的是在项目文件夹下创建一个 .cmd 文件,就像这个例子。

my_scheduler.cmd

echo "Starting my Scheduler Task"
call "C:\Users\YOUR_NAME\project\venv\Scripts\python.exe" "C:\Users\YOUR_NAME\project\your_script.py"
pause

最后,打开 Windows Task Scheduler 并加上 .cmd 归入 basic task 子菜单。

另外,您可以考虑不使用 venv's Python executable 您可以使用您的系统 Python 可执行文件。但不推荐这样做. 规则上说:"每个项目都应该有自己的依赖关系,并且应该在适当的虚拟环境下运行。每个项目都应该有自己的依赖关系,并且应该在适当的virtualenv下运行。.

奖金。

ApScheduler 可能会因为这种行为而产生奇怪的行为。

如果一个作业的执行由于池中没有可用的线程或进程而被延迟,执行器可能会因为它运行得太晚(与最初指定的运行时间相比)而跳过它。如果在你的应用程序中很可能发生这种情况,你可能需要增加执行器中的线程进程数量,或者将 misfire_grace_time 设置调整为一个更高的值。

更多信息请访问 APScheduler文档


1
投票
  1. 安装Python python.org
  2. 按Win+X键,选择 "命令提示符"。
  3. 运转 pythonw C:\Stuff\Stuff2\EmailScheduler_PPE.py

了解后果。只有在你信任你所使用的库的情况下才运行脚本!

pythonw 意思是用Python运行脚本而不显示控制台窗口。您可能想使用 python 首先进行调试。第三步可能在视觉上没有任何作用,但脚本应该在后台启动。

© www.soinside.com 2019 - 2024. All rights reserved.