You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过批处理文件实现Python脚本每小时自动重载?

解决方案

原批处理失效的原因

  • 批处理默认同步执行python script.py命令,会阻塞等待脚本进程退出,才会运行后续的timeout定时、taskkill杀进程逻辑。只要脚本没有意外终止,自动重载的逻辑永远不会触发。
  • taskkill目标设置错误,误杀cmd.exe会直接终止当前批处理进程,无法回到重启循环。

批处理实现方案

如果希望继续用批处理实现「意外退出自动重启 + 每小时强制重载」的需求,使用以下代码即可:

@echo off
setlocal
:: 替换为你实际的Python脚本文件名
set TARGET_SCRIPT=script.py

:loop
:: 后台启动Python脚本,不阻塞批处理后续逻辑
start /b python %TARGET_SCRIPT% %*
:: 等待3600秒,禁止用户按键跳过等待
timeout /t 3600 /nobreak > nul
:: 精准匹配运行目标脚本的Python进程并杀死,避免误杀其他Python程序
taskkill /f /fi "imagename eq python.exe" /fi "commandline like *%TARGET_SCRIPT%*" > nul 2>&1
:: 等待2秒确保进程完全退出
timeout /t 2 /nobreak > nul
goto loop

Python内置实现方案(更稳定)

你也可以直接把定时重载逻辑写到Python脚本内部,不需要依赖批处理控制,兼容性和稳定性更好,同时自带异常自动重启能力:

import time
from multiprocessing import Process

# 你的原有脚本业务逻辑全部放到这个函数中
def your_business_logic():
    # 以下为示例代码,替换为你自己的脚本内容
    while True:
        print("脚本运行中...")
        time.sleep(5)

if __name__ == "__main__":
    while True:
        # 启动子进程运行业务逻辑
        worker = Process(target=your_business_logic, daemon=True)
        worker.start()
        # 等待1小时
        worker.join(timeout=3600)
        # 如果子进程还在运行(无异常退出),强制终止后重启
        if worker.is_alive():
            worker.terminate()
            worker.join()
        # 间隔1秒后重启
        time.sleep(1)

内容的提问来源于stack exchange,提问作者Alexey Kuznetsov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:06:02