Windows自动化重启python脚本

ops/2024/9/25 8:22:39/

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

  1. 获取已经启动的应用的ID
  2. kill这个应用ID
  3. 再次根据指定的Python环境运行这个脚本

文章目录

  • 解决步骤
    • 1. 获取已经启动的应用ID
    • 2. 根据应用ID,结束这个应用程序
    • 3. 再次根据指定的Python环境运行这个脚本
  • 完整示例

解决步骤

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

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

import os
import subprocess
import time
from loguru import loggerdef exec_cmd(cmd):"""执行命令与结果"""r = os.popen(cmd)text = r.read()r.close()return textcmd = "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 loggerdef exec_cmd(cmd):"""执行命令与结果"""r = os.popen(cmd)text = r.read()r.close()return textdef 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()

http://www.ppmy.cn/ops/23649.html

相关文章

2000.1-2023.8中国经济政策不确定性指数数据(日度、月度)

2000.1-2023.8中国经济政策不确定性指数数据(日度、月度) 1、时间:日度:2001.1.1-2022.06.17,月度2000.1-2023.8 2、指标:CNEPU(经济政策不确定性指数) 3、来源:China…

一文解读:阿里云 AI 基础设施的演进与挑战

云布道师 2024 年 4 月 18-19 日,2024 中国生成式 AI 大会在北京 JW 万豪酒店举行,阿里云高级技术专家、阿里云异构计算 AI 推理团队负责人李鹏受邀在【AI Infra】专场发表题为《AI 基础设施的演进与挑战》的主题演讲。李鹏从 AIGC 对云基础设施的挑战、…

图片懒加载vue

这里只能实现图片的懒加载,不能实现其他的懒加载。 加载插件: npm install vue-lazyload --save在main.js中写入插件 // 图片懒加载 import VueLazyload from "vue-lazyload"; const app createApp(App) app.use(VueLazyload,{preLoad: 1.…

力扣HOT100 - 78. 子集

解题思路&#xff1a; class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> lists new ArrayList<>(); // 解集lists.add(new ArrayList<Integer>()); // 首先将空集加入解集中for(int i 0; i < n…

spring boot 部署jar包瘦身 jar和lib分离

在默认情况下&#xff0c;spring boot打包后的jar包&#xff0c;包含所依赖的jar包&#xff0c;导致打出来的包比较大。在更新等操作情况下&#xff0c;传输更新包比较费时&#xff0c;为节省传输时间&#xff0c;本文由jar和lib分离的方式实现jar瘦身。 pom.xml配置&#xff1…

Unity 数字字符串逗号千分位

使用InputField时处理输入的数字型字符串千分位自动添加逗号&#xff0c;且自动保留两位有效数字 输入&#xff1a;123 输出&#xff1a;123.00 输入&#xff1a;12345 输出&#xff1a;12,345.00 代码非常简单 using UnityEngine; using TMPro;public class …

如何在虚拟专用服务器上配置 Nginx Web 服务器

本文档涵盖的是不再受支持的 Ubuntu 版本。如果您目前正在运行 Ubuntu 12.04 服务器&#xff0c;我们强烈建议升级或迁移到受支持的 Ubuntu 版本&#xff1a; 升级到 Ubuntu 14.04从 Ubuntu 14.04 升级到 Ubuntu 16.04将服务器数据迁移到受支持的版本 原因&#xff1a; Ubunt…

Twisted 与 Tornado 中的 WebSocket 连接问题及解决方案

1、问题背景 项目中我们需要通过 Tornado HTTP 处理程序建立WebSocket连接&#xff0c;该连接需要处理多个用户请求&#xff0c;并且将从外部服务器获取的数据存储到数据库中。我们尝试了以下实现&#xff1a; from twisted.internet import reactor from autobahn.websocket…