【问题标题】:Python script never ends in task schedulerPython 脚本永远不会在任务调度程序中结束
【发布时间】:2016-06-03 22:21:56
【问题描述】:

我正在尝试设置一个自动执行的 python 代码。

我从一个要执行的小代码开始:

import datetime
with open("out.txt","a") as f:
    f.write(datetime.datetime.now().isoformat())

任务将正常启动,并执行(文件已修改),但在任务调度程序中它永远不会结束。

thisthis 存在于 SO 中,但没有真正的答案。这些线程中提出的唯一解决方法是在 Windows 中的给定时间后强制结束任务,但这需要知道 python 脚本需要多长时间,而我的实际任务并非如此。

任务调度器如何知道一个python脚本已经完成?

我在任务调度器中按以下方式运行它:

  • 程序:cmd

  • 参数:/c C:\python27\python.exe C:\path\of\script.py

  • 执行于:C:\path\of\

我尝试了一些变体,比如执行 python 而不是 cmd,但它没有改变任何东西。我曾希望 /c 会强制关闭任务。

【问题讨论】:

  • 我想知道如果你之后明确关闭文件是否会终止。
  • 退出状态 0 代表任何任务的成功完成。尝试在最后添加sys.exit(0),退出前也要关闭文件指针。
  • 感谢您的建议,我在代码中添加了 f.close()sys.exit(0),但它并没有修改问题:当我从任务调度程序启动任务时,任务仍然保持为“正在运行”

标签: python windows scheduled-tasks


【解决方案1】:

对于使用 CMD 作为中间启动器的此类问题,似乎没有正确的解决方法。 任务计划程序 GUI 中有一个 [End] 命令,单击它总是会终止 CMD/批处理文件,而生成的 python.exe 进程将被丢弃。

真正的问题:cmd 似乎没有任何方法可以将终止信号传递给 python.exe。而且 taskengine 也不能可靠地确定 python.exe 是否存在。

【讨论】:

    【解决方案2】:

    正如 Gaurav Pundir 所说,添加 sys.exit(0) 应该正确结束脚本,从而结束任务。但是,您确实需要使用import sys 添加sys 库才能使用sys.exit(0)。希望这会有所帮助!

    【讨论】:

    • 我在“finally:”语句中尝试了这个,但没有成功。无论如何,我都会保留它以帮助确保脚本正确关闭。我确实为这件事打了个结。谢谢!
    【解决方案3】:

    对我来说它看起来像一个错误。 尝试在任务管理器下查找 python 控制台。 如果不存在则程序已成功退出。

    我在 Windows 10 上遇到同样的问题,python 脚本运行成功,任务管理器下没有 python 控制台,但计划任务状态仍然显示“正在运行”

    【讨论】:

    • 我刚刚手动关闭了Python,没有后台进程运行Python。我怀疑你是对的。
    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 2023-04-06
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多