【发布时间】:2019-05-21 21:22:09
【问题描述】:
我有一个简单的 Python 脚本,当我在 Jupyter Notebook 中启动它或将其转换为 .exe 后,它可以正常运行,但是当我通过 Windows 调度程序启动它时它不起作用(我尝试启动这两个 .py 文件和.exe)。我错过了什么?
背景:
我有一个简单的 3.7 Python 脚本,我想定期运行它。在转向更复杂的脚本之前,我正在使用简单的 Python 脚本测试该方法。
当我在 Jupyter 中启动它时,我的脚本运行良好,但在使用 Windows 调度程序时它不起作用。我所做的是,我在 Windows 调度程序中创建了一个基本任务,并设置了以下属性:
- 一般:仅在用户登录时运行;
- 触发器:每天;
- 操作:我尝试了几种输入组合。我尝试的最新组合是在“程序/脚本”中包含 C:\Pythondata\dist\test.exe 并且没有可选参数;
- 条件和设置:我保留了默认选项。
当我在 Windows Scheduler 中单击 RUN 任务时,会出现一个类似命令的黑色背景窗口几秒钟,然后消失,但没有任何反应,并且输出的 txt 文件没有被编辑。我没有收到错误消息,当我检查任务的“历史记录”时,它显示“任务已完成”或“任务注册已更新”。基本上,似乎没有错误,但什么也没发生。
我想使用 Windows 调度程序解决问题,但我也愿意接受有关定期运行脚本的方法的建议。但是,我是一个非常基础的 Python 用户,可能无法做更复杂的事情。我的系统是 Windows 10 Home,Python 3.7。
我正在使用的简单代码:
import datetime
now = datetime.datetime.now()
file = open("testfile.txt","w")
file.write("Hello Word" + str(now))
print("done")
注意:脚本将日期戳写入 .ipynb 文件的同一文件夹中的文本文件中。我还使用 pyinstaller 将文件转换为 .exe。在这两种情况下,脚本都运行良好。但是,它不适用于 Windows 调度程序。
【问题讨论】:
-
你是通过anaconda安装python的吗?我有一个类似的脚本可以运行,可以分享给你
-
这种日程安排很艰难。你可以看看调度库pypi.org/project/schedule,它处理得很好
-
我不了解windows,但是在linux中如果你在写文件的时候没有指定绝对路径,那么路径会被解释为相对于你当前的目录。这也适用于 crontab(linux 的任务自动化工具),但由于不清楚 crontab 在运行脚本时“在哪里”这一事实而变得复杂。这是自动化任务的常见缺陷,至少在 linux 中是这样。我建议您搜索文件名。你可能会在意想不到的地方找到它。
-
它适用于 Windows 7,因此设置环境变量的过程可能有些不同,但除此之外,我认为 my answer 中的另一个与 Windows 相关的问题可能是相关的。另请注意,您应该在写入的数据中添加一个换行符:
file.write("Hello Word" + str(now) + "\n"),然后使用file.close()关闭文件。 -
open("testfile.txt","w")-- 这会在工作目录中创建文件,这取决于进程的运行方式。它不是“在 .ipynb 文件的同一文件夹中”。对于脚本目录,如果是冻结的可执行文件(即如果定义了sys.frozen),则使用sys.executable的目录,否则使用__file__的目录。