Windows自动化重启python脚本

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

  1. 获取已经启动的应用的ID
  2. kill这个应用ID
  3. 再次根据指定的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. Windows自动化python脚本

    2024-04-27 19:02:04       32 阅读
  2. C++ 程序自动windows 有源码)

    2024-04-27 19:02:04       45 阅读
  3. pythonWindows关机//锁屏

    2024-04-27 19:02:04       46 阅读
  4. Tomcat定时脚本

    2024-04-27 19:02:04       69 阅读
  5. 内存溢出如何实现自动化

    2024-04-27 19:02:04       35 阅读
  6. C#实现windows系统、关机

    2024-04-27 19:02:04       56 阅读
  7. Liunx和WindowsMySql

    2024-04-27 19:02:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 19:02:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 19:02:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 19:02:04       82 阅读
  4. Python语言-面向对象

    2024-04-27 19:02:04       91 阅读

热门阅读

  1. 4.19作业 驱动开发

    2024-04-27 19:02:04       34 阅读
  2. 面试经典150题——最后一个单词的长度

    2024-04-27 19:02:04       29 阅读
  3. 容器内的服务和docker 映射的服务

    2024-04-27 19:02:04       29 阅读
  4. Python 潮流周刊#48:Python 3.14 的发布计划

    2024-04-27 19:02:04       28 阅读
  5. 2023-2024年6G行业报告合集(精选33份)

    2024-04-27 19:02:04       37 阅读
  6. C++问题笔记

    2024-04-27 19:02:04       32 阅读
  7. filebeat 设置elasticsearch索引的 max_result_window

    2024-04-27 19:02:04       30 阅读
  8. LeetCode刷题笔记第104题:二叉树的最大深度

    2024-04-27 19:02:04       33 阅读
  9. spring mvc 和 struts 的区别是什么?

    2024-04-27 19:02:04       30 阅读
  10. 新质生产力与科技创新

    2024-04-27 19:02:04       36 阅读