笔记-用Python脚本启停JAR程序

用Python脚本启停JAR程序,需要用到python中的以下内置模块

subprocess 是 Python 的一个标准库模块,用于在新进程中执行子命令,获取子进程的输入/输出/错误以及返回码等os 是 Python 的一个标准库模块,它提供了与操作系统交互的功能。通过 os 模块,Python 程序可以访问操作系统提供的底层功能,如文件和目录管理、环境变量、系统命令执行、进程管理等sys模块是Python标准库中的一个内置模块,它提供了与Python解释器和运行环境相关的功能。具体来说,sys模块包含了一系列用于与Python解释器交互的函数和变量,这些函数和变量可以用于获取命令行参数、控制程序的执行、管理模块和包、处理异常等time 是 Python 的一个标准库模块,它提供了各种时间相关的函数。time 模块主要用于时间的访问和转换,包括时间戳、结构化时间、字符串时间等signal模块是Python的一个标准库模块,它用于处理与操作系统相关的信号。信号(signal)是一种异步通知机制,用于通知进程某个事件的发生。在Python中,signal模块允许开发者注册信号处理函数,以便在接收到特定信号时执行相应的操作。
signal模块提供了一些常用的信号和函数,例如:
SIGALRM:闹钟信号,当使用signal.alarm()设置的定时器超时时发送。
SIGTERM:终止信号,用于请求程序正常终止。
SIGQUIT:终端退出信号,通常用于在终端中强制退出程序。
signal.alarm(time):设置一个定时器,在time秒后发送SIGALRM信号。
signal.signal(signum, handler):注册一个信号处理函数handler,用于处理指定的信号signum。
使用signal模块,开发者可以优雅地处理各种操作系统信号datetime 是 Python 的一个标准库模块,它提供了日期和时间相关的类。这个模块主要用于处理日期和时间数据,如获取当前日期和时间、日期的加减、格式化日期和时间等

详细python脚本代码如下

import subprocess  
import os  
import sys  
import time  
import signal
from datetime import datetime  # 获取当前日期和时间  
now = datetime.now()  
# 格式化日期和时间为字符串  
formatted_now = now.strftime("%Y%m%d%H%M%S")  # JAR文件的路径(相对于脚本的路径)  
JAR_PATH = 'graph-note-app.jar'  
# 用于保存JVM进程PID的文件路径  
PID_FILE = 'app.pid'  def start_app():  if is_app_running():  print("App is already running.")  return  # 定义日志文件路径  stdout_log_file = 'app_stdout'+formatted_now+'.log'  stderr_log_file = 'app_stderr'+formatted_now+'.log'  # 确保日志文件不存在,或者清空它们  with open(stdout_log_file, 'w') as f:  f.truncate(0)  with open(stderr_log_file, 'w') as f:  f.truncate(0)  cmd = ['java', '-jar', JAR_PATH]  process = subprocess.Popen(cmd, stdout=open(stdout_log_file, 'a'), stderr=open(stderr_log_file, 'a'))  with open(PID_FILE, 'w') as f:  f.write(str(process.pid))  print(f"App started with PID: {process.pid}")  def stop_app():  if not is_app_running():  print("App is not running.")  return  with open(PID_FILE, 'r') as f:  pid = int(f.read().strip())  try:  # 尝试优雅地终止进程  os.kill(pid, signal.SIGTERM)  time.sleep(2)  # 等待进程终止  if is_app_running():  # 如果进程仍然存在,则强制杀死它  os.kill(pid, signal.SIGKILL)  print(f"App with PID {pid} forcibly killed.")  else:  print(f"App with PID {pid} stopped.")  except OSError as e:  print(f"Error stopping app: {e}")  try:  os.remove(PID_FILE)  except FileNotFoundError:  pass  def is_app_running():  if not os.path.exists(PID_FILE):  return False  with open(PID_FILE, 'r') as f:  pid = int(f.read().strip())  try:  os.kill(pid, 0)  # 尝试向进程发送0信号(不会实际终止进程)  except OSError:  return False  return True  def status_app():  if is_app_running():  print("App is running.")  else:  print("App is not running.")  def show_help():  print("Available commands:")  print("start\t- Start the JAR application.")  print("stop\t- Stop the JAR application if it's running.")  print("status\t- Check if the JAR application is running.")  print("help\t- Show this help message.")  if __name__ == "__main__":  if len(sys.argv) < 2:  show_help()  sys.exit(1)  command = sys.argv[1].lower()  if command == 'start':  start_app()  elif command == 'stop':  stop_app()  elif command == 'status':  status_app()  elif command == 'help':  show_help()  else:  print(f"Unknown command: {command}")  show_help()  sys.exit(1)

使用效果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/830872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金融案例:统一查询方案助力数据治理与分析应用更高效、更安全

随着企业数据规模的增长和业务多元化发展&#xff0c;海量数据实时、多维地灵活查询变成业务常见诉求。同时多套数据库系统成为常态&#xff0c;这既带来了数据管理的复杂性&#xff0c;又加大了数据使用的难度&#xff0c;面对日益复杂的数据环境和严格的数据安全要求&#xf…

flexpaper 远程命令执行

flexpaper 远程命令执行 这个是有POC的&#xff0c;先简单复现一下 GET /ipg/static/appr/lib/flexpaper/php/view.php?doc1.docx"%26echoshell>shel233l.txt%23&pageexp&formatswf&callbackcallback&isSplittrue HTTP/1.1 Host: 192.168.50.22 Use…

【蓝桥杯】第十五届蓝桥杯C/C++B组省赛补题

文章目录 估分试题 A: 握手问题试题 B: 小球反弹试题 C: 好数试题 D: R 格式试题 E: 宝石组合试题 F: 数字接龙试题 G: 爬山试题 H: 拔河 估分 测试网址&#xff1a;民间测试数据 5 0 9 5 2 5 18 2 46 5 0 9 5 2 5 18 2 46 50952518246 试题 A: 握手问题 #inc…

【PSINS函数讲解】IMU误差设置方法——imuerrset

所用函数 imuerrset 函数使用形式 此函数用于输入IMU的相关误差参数,返回对应的IMU误差设置,工具箱中的一般使用形式为: imuerr = imuerrset(0, 0, 0.01, 100);上述的四个输入为函数的基本输入,分别为: 陀螺仪常值误差(单位:/小时)加速度常值误差(单位:ug,即约为…

Python 机器学习 基础 之 学习 基础环境搭建

Python 机器学习 基础 之 学习 基础环境搭建 目录 Python 机器学习 基础 之 学习 基础环境搭建 一、简单介绍 二、什么是机器学习 三、python 环境的搭建 1、Python 安装包下载 2、这里以 下载 Python 3.10.9 为例 3、安装 Python 3.10.9 4、检验 python 是否安装成功&…

Systemback Ubuntu14.04 制作自定义系统ISO镜像

工作需要&#xff0c;要基于ubuntu自定义一些编译环境并将自己配置好的ubuntu做成镜像。 硬件准备 ​ 为保证能够顺利完成系统iso镜像的制作与系统还原&#xff0c;推荐准备一个较大容量的U盘或者移动固态硬盘&#xff0c;同时确保自己的Ubuntu系统还有比较大的可用空间。 1 S…

【DevOps】Docker安装和使用示例

一、Ubuntu 20.04 上安装 Docker 在 Ubuntu 20.04 上安装 Docker 可以通过几种不同的方法完成&#xff0c;其中最简单和最常见的方法是使用 Docker 的官方安装脚本&#xff0c;或者通过 Ubuntu 的包管理工具 apt 手动安装。这里我将介绍两种方法&#xff1a;使用 Docker 的便捷…

jenkins教程

jenkins 一、简介二、下载安装三、配置jdk、maven和SSH四、部署微服务 一、简介 Jenkins是一个流行的开源自动化服务器&#xff0c;用于自动化软件开发过程中的构建、测试和部署任务。它提供了一个可扩展的插件生态系统&#xff0c;支持各种编程语言和工具。 Jenkins是一款开…

美团代付系统源码搭建ZHU16728

2024美团外卖点单代付系统源码基于php 基础开发&#xff0c;这套系统搭载了外卖系统属性&#xff0c;可添加物流信息。 1.完美对接微信支付&#xff0c;支付宝支付。 2.这套系统全新UI界面&#xff0c;完美搭建可以用作商用系统服务。 3.前端UI界面内容丰富&#xff0c;功能齐全…

有关CSS中排版常见问题(清除默认样式问题 + 元素居中问题 + 元素之间的空白问题 + 行内块的幽灵空白问题)

前言&#xff1a;在练习CSS排版的时候&#xff0c;我们经常会遇到一些排版上的问题&#xff0c;那么我们如何去解决这些问题呢&#xff1f;本篇文章给出了一些新手在练习排版时候可能会遇到的问题的解决方案。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我…

【消息队列】RabbitMQ五种消息模式

RabbitMQ RabbitMQRabbitMQ安装 常见的消息模型基本消息队列SpringAMQPWorkQueue消息预取发布订阅模式Fanout ExchangeDirectExchangeTopicExchange 消息转换器 RabbitMQ RabbitMQ是基于Erlang语言开发的开源消息通信中间件 官网地址&#xff1a;https://www.rabbitmq.com/ R…

【VUE】Vue中实现树状表格结构编辑与版本对比的详细技术实现

Vue中实现树状表格结构编辑与版本对比的详细技术实现 在Vue中&#xff0c;创建一个可编辑的树状表格并实施版本对比功能是一种需求较为常见的场景。在本教程中&#xff0c;我们将使用Vue结合Element UI的el-table组件&#xff0c;来构建一个树状表格&#xff0c;其中包含添加、…

速盾:什么是cdn架构

CDN&#xff08;Content Delivery Network&#xff09;即内容分发网络&#xff0c;是一种分布式的架构&#xff0c;用于提高互联网上的内容传输速度和用户体验。CDN架构通过将内容分发到全球多个节点&#xff0c;使用户能够从最近的节点获取内容&#xff0c;从而减少延迟和网络…

第15届蓝桥杯-蒟蒻の反思与总结

基本情况 第15届蓝桥杯&#xff0c;参加c大学A组&#xff0c;完整做出的只有两道填空题。 然后后面的题目基本只拿了20%这样的分数&#xff0c;最后两道15分题目空白。 满分100分&#xff0c;估计总分在15-20分这样。 对于二分答案还是没有太熟练&#xff0c;考试的时候没有…

深入探究C++四大关键特性:初始化列表、友元函数、内部类与static成员

目录 1. 构造函数不为人知的那些事 1.1 构造函数体赋值与初始化列表对比 1.2 explicit关键字与构造函数隐式转换 2. static成员 2.1 static成员的概念 2.2 static成员的特性与应用 2.3 小结 3. C11 成员变量初始化新用法 4. 友元 4.1 友元函数 4.2 友元类 5. 内部类…

数字孪生需要的世界模型

今天看到这篇文章&#xff0c;提到了世界模型&#xff0c;仅是数据驱动的数字孪生已经不能满足需要了&#xff0c;需要应用世界模型使数字孪生具备推理、判断、感知世界的能力。 由于人工智能和机器学习的兴起&#xff0c;使用数据驱动建模来表示复杂系统已变得普遍&#xff0…

Python 中的花卉矩阵组合

使用场景描述 (rib) 协议编写脚本的基础知识。通过创建在 3D 空间中转换的基本几何图形,解决了 xyz 坐标系的基础知识。初步渲染是使用基本着色完成的,因此可以更容易地看到几何体。RenderMan 图1 图 1 是我作为作业参考的示例图片,并尝试匹配 中的图片。为了完成这项任务…

Python | Leetcode Python题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; class Solution:def rotateRight(self, head: ListNode, k: int) -> ListNode:if k 0 or not head or not head.next:return headn 1cur headwhile cur.next:cur cur.nextn 1if (add : n - k % n) n:return headcur.next headwhi…

JS从入门到精通

1.JS概述 window.sessionStorage.setItem("flag", flag);原生JS也可以存SessionStorage 尚硅谷的视频教程&#xff1a; 不用在服务端&#xff0c;在客户端就验证了。 解释型VS编译型&#xff1b;事件驱动&#xff1b;客户端的脚本语言&#xff1b;脚本语言&#xff0…

机器学习的两种典型任务

机器学习中的典型任务类型可以分为分类任务&#xff08;Classification&#xff09;和回归任务&#xff08;Regression&#xff09; 分类任务 回归任务 简单的理解&#xff0c;分类任务是对离散值进行预测&#xff0c;根据每个样本的值/特征预测该样本属于类 型A、类型B 还是类…