如何通过批处理文件实现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
相关产品推荐
相关产品推荐

