当前位置: 代码网 > it编程>前端脚本>Python > Windows自动化重启python脚本的方法详解

Windows自动化重启python脚本的方法详解

2025年04月28日 Python 我要评论
博主遇到一个需求:每天都需要定时重启一个python脚本,这个脚本是跑在windows电脑上的,下面是博主的解决方法:获取已经启动的应用的idkill这个应用id再次根据指定的python环境运行这个

博主遇到一个需求:每天都需要定时重启一个python脚本,这个脚本是跑在windows电脑上的,下面是博主的解决方法:

  • 获取已经启动的应用的id
  • kill这个应用id
  • 再次根据指定的python环境运行这个脚本

解决步骤

1. 获取已经启动的应用id

博主的程序会监听到5001端口,因此根据这个特性,运行如下代码获取启动的应用id:

import os
import subprocess
import time
from loguru import logger


def exec_cmd(cmd):
    """执行命令与结果"""
    r = os.popen(cmd)
    text = r.read()
    r.close()
    return text

cmd = "netstat -aon|findstr 5001"
result = exec_cmd(cmd).strip()

得到如下结果:

tcp    0.0.0.0:5001           0.0.0.0:0              listening       2404

可以看到,有一个tcp链接在监听5001端口,其中最后一个2404就是这个应用的id

2. 根据应用id,结束这个应用程序

_port = result.strip().split(' ')[-1]
exec_cmd(f"taskkill /t /f /pid {_port}")  # 成功关闭

3. 再次根据指定的python环境运行这个脚本

subprocess.popen(r"c:\users\user4\anaconda3\envs\my_env\python.exe main_run.py",
                     cwd=r"c:\users\user4\desktop\my_python_bin")
logger.success("重启预测模型,延迟20s....")

这里用到了subprocess.popen(),其中涉及到了2个目录和1个文件:

第一行c:\users\user4\anaconda3\envs\my_env\python.exe:这个是启动python的解释器完整路径(最好是完整路径)

第一行main_run.py:这个是需要重启的python脚本文件

第二行c:\users\user4\desktop\my_python_bin:这个是脚本所在的目录

以上程序可以理解为:

解释器:c:\users\user4\anaconda3\envs\my_env\python.exe

脚本目录:c:\users\user4\desktop\my_python_bin\main_run.py

完整示例

import os
import subprocess
import time
from loguru import logger


def exec_cmd(cmd):
    """执行命令与结果"""
    r = os.popen(cmd)
    text = r.read()
    r.close()
    return text

def restart_my_python():
	cmd = "netstat -aon|findstr 5001"
	result = exec_cmd(cmd).strip()
	if result != "":
        time.sleep(0.5)
        _port = result.strip().split(' ')[-1]
        exec_cmd(f"taskkill /t /f /pid {_port}")  # 成功关闭
	subprocess.popen(r"c:\users\user4\anaconda3\envs\my_env\python.exe main_run.py",
	                 cwd=r"c:\users\user4\desktop\my_python_bin")
	logger.success("重启脚本,延迟5s....")
    time.sleep(5)


restart_my_python()

方法补充

1.自动重启挂掉的python脚本

为内存问题或者其它blabla问题(总之不是代码问题),程序可能会偶尔挂掉,我们又不能整天盯着程序,怎么办呢?写个脚本来检查程序是否挂掉,如果挂掉就重启,这是一个不错的想法,具体做法依操作系统而不同。

方法1

在linux下可以新建一个名为run.sh的脚本:

#!/bin/sh
while [ 1 ]; do
python program.py --params
done

在命令行中这样启动:

sh run.sh

其中program.py是要运行的python脚本,–params是参数。

在windows下可以类似地建个bat文件,由于bat不太熟,所以这部分就先空着。

方法2

在python中增加一些额外检查异常的代码,如果发生异常,就重新执行,这里用的是递归的方法。下面的例子中,我设置count最大为3,为了避免无限递归下去。

import time
count = 0
def compute_number():
for i in xrange(10):
print 'count number: %s' % str(i+1)
time.sleep(1)
raise exception("a", "b")
def main():
print "autores is starting"
print "respawning"
global count
if count < 3:
try:
count += 1
compute_number()
except exception, e:
print e
main()
finally:
print 'success'
if __name__ == "__main__":
main()

方法3

从这里 借鉴的做法:

#!/usr/bin/env python

import os, sys, time

def main():

print "autores is starting"

executable = sys.executable

args = sys.argv[:]

args.insert(0, sys.executable)

time.sleep(1)

print "respawning"

os.execvp(executable, args)

if __name__ == "__main__":

main()

2.python脚本如何自动重启

通过在python脚本中使用try-except块,可以捕获可能导致脚本崩溃的异常,并在异常被捕获后重新启动脚本。具体实现如下:

import time
import os
import sys
def main():
    while true:
        try:
            # 主程序逻辑
            print("脚本正在运行...")
            time.sleep(10)  # 模拟长时间运行任务
        except exception as e:
            print(f"发生错误: {e}")
            print("脚本将在5秒后重启...")
            time.sleep(5)
            os.execv(sys.executable, ['python'] + sys.argv)
if __name__ == "__main__":
    main()

该脚本在异常发生时,会打印错误信息并在5秒后重启自己。

到此这篇关于windows自动化重启python脚本的方法详解的文章就介绍到这了,更多相关python脚本重启内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com