利用python脚本如何简化jar操作命令

作者:神牛003 时间:2021-02-12 11:08:15 

前言

本篇和大家分享的是使用python简化对jar包操作命令,封装成简短关键字或词,达到操作简便的目的。最近在回顾和构思shell脚本工具,后面一些文章应该会分享shell内容,希望大家继续关注。

  • 获取磁盘中jar启动包

  • 获取某个程序进程pid

  • 自定义jar操作命令

获取磁盘中jar启动包

这一步骤主要扫描指定磁盘中待启动的jar包,然后获取其路径,方便后面操作java命令:


#获取磁盘中jar启动包
def find_file_bypath(strDir):
filelist = os.listdir(strDir)
for file in filelist:
 if os.path.isdir(strDir + "/" + file):
  find_file_bypath(strDir + "/" + file)
 else:
  if(file.find(".jar") >= 0):
   fileInfo = MoFileInfo(file,strDir + "/" + file)
   all_list.append(fileInfo)

这个递归获取路径就不多说了,可以参考前一篇文章

获取某个程序进程pid

在linux中获取某个程序pid并打印出来通常的命令是:

1 ps -ef | grep 程序名字

在py工具中同样用到了grep命令,通过执行linux命令获取相对应的pid值:


#获取pid
def get_pid(name):
child = subprocess.Popen(['pgrep', '-f', name], stdout=subprocess.PIPE, shell=False)
response = child.communicate()[0]
print(response)
return response

这里直接取的第一个值,因为上面第一节已经能够定位到程序jar包的名字,所以获取pid很容易

自定义jar操作命令

自定义其实就是用我们随便定义的单词或关键字来代替jar包操作命令,这里我封装了有5种,分别如下:

  • nr:nohup java -jar {} 2>&1 &

  • r:java -jar {}

  • k:kill -9 {}

  • d:rm -rf {}

  • kd:kill -9 {}

{}代表的是pid和jar包全路径,相关代码:


#执行命令
def exec_file(index):
try:
 if(index <= -1):
  pass
 else:
  fileInfo = all_list[int(index)]
  print("你选择的是:{}".format(fileInfo.path))
  strcmd = raw_input("请输入执行命令(nr:nohup启动java r:java启动 k:kill d:删除java包 kd:kill+删除jar包):\r\n")
  if(strcmd == "nr"):
  os.system("nohup java -jar {} 2>&1 & ".format(fileInfo.path))
  elif(strcmd == "r"):
  os.system("java -jar {}".format(fileInfo.path))
  elif(strcmd == "k"):
  pid = get_pid(fileInfo.name)
  print("pid:" + pid)
  strcmd_1 = "kill -9 {}".format(pid)
  exec_cmd(strcmd_1)
  elif(strcmd == "d"):
  strcmd_1 = "rm -rf {}".format(fileInfo.path)
  exec_cmd(strcmd_1)
  elif(strcmd == "kd"):
  pid = get_pid(fileInfo.name)
  strcmd_1 = "kill -9 {}".format(pid)
  exec_cmd(strcmd_1)

strcmd_1 = "rm -rf {}".format(fileInfo.path)
  exec_cmd(strcmd_1)
  else:
  print("无任何操作")
except:
 print("操作失败")

这里python操作linux命令用到的方式是os.system(command) ,这样已定保证了linux命令执行成功后才继续下一步的操作;下面是本次分享内容的全部代码:


#!/usr/bin/python
#coding=utf-8
import os
import subprocess
from subprocess import check_output

all_list = []

class MoFileInfo:
def __init__(self,name,path):
 self.name = name
 self.path = path

#获取磁盘中jar启动包
def find_file_bypath(strDir):
filelist = os.listdir(strDir)
for file in filelist:
 if os.path.isdir(strDir + "/" + file):
  find_file_bypath(strDir + "/" + file)
 else:
  if(file.find(".jar") >= 0):
   fileInfo = MoFileInfo(file,strDir + "/" + file)
   all_list.append(fileInfo)

def show_list_file():
for index,x in enumerate(all_list):
 print("{}. {}".format(index,x.name))

#获取pid
def get_pid(name):
child = subprocess.Popen(['pgrep', '-f', name], stdout=subprocess.PIPE, shell=False)
response = child.communicate()[0]
print(response)
return response

#执行命令
def exec_file(index):
try:
 if(index <= -1):
  pass
 else:
  fileInfo = all_list[int(index)]
  print("你选择的是:{}".format(fileInfo.path))
  strcmd = raw_input("请输入执行命令(nr:nohup启动java r:java启动 k:kill d:删除java包 kd:kill+删除jar包):\r\n")
  if(strcmd == "nr"):
  os.system("nohup java -jar {} 2>&1 & ".format(fileInfo.path))
  elif(strcmd == "r"):
  os.system("java -jar {}".format(fileInfo.path))
  elif(strcmd == "k"):
  pid = get_pid(fileInfo.name)
  print("pid:" + pid)
  strcmd_1 = "kill -9 {}".format(pid)
  exec_cmd(strcmd_1)
  elif(strcmd == "d"):
  strcmd_1 = "rm -rf {}".format(fileInfo.path)
  exec_cmd(strcmd_1)
  elif(strcmd == "kd"):
  pid = get_pid(fileInfo.name)
  strcmd_1 = "kill -9 {}".format(pid)
  exec_cmd(strcmd_1)

strcmd_1 = "rm -rf {}".format(fileInfo.path)
  exec_cmd(strcmd_1)
  else:
  print("无任何操作")
except:
 print("操作失败")

def exec_cmd(strcmd):
str = raw_input("是否执行命令(y/n):" + strcmd + "\r\n")
if(str == "y"):
 os.system(strcmd)

strDir = raw_input("请输入jar所在磁盘路径(默认:/root/job):\r\n")
strDir = strDir if (len(strDir) > 0) else "/root/job"
#获取运行包
find_file_bypath(strDir)
#展示运行包
show_list_file()
#选择运行包
strIndex = raw_input("请选择要运行的编号:\r\n")
#执行命令
exec_file(strIndex)

来源:https://www.cnblogs.com/wangrudong003/p/10423548.html

标签:python,简化,jar
0
投稿

猜你喜欢

  • 浅谈python中拼接路径os.path.join斜杠的问题

    2023-08-21 23:41:23
  • SQL SERVER 将XML变量转为JSON文本

    2024-01-21 23:38:46
  • vscode 左侧扩展活动栏内容消失的问题及解决方法

    2022-01-12 04:26:35
  • 使用Python的Django框架结合jQuery实现AJAX购物车页面

    2023-05-21 01:59:28
  • 如何使用Django默认的Auth权限管理系统

    2022-11-29 04:09:40
  • Linux安装MySQL教程(二进制分发版)

    2024-01-15 03:24:02
  • ASP伪造REFERER方法

    2008-07-03 12:48:00
  • *.HTC 文件的简单介绍

    2008-11-24 17:36:00
  • pygame游戏之旅 按钮上添加文字的方法

    2022-09-28 23:41:39
  • Python中ROS和OpenCV结合处理图像问题

    2023-04-27 00:33:02
  • Python PyQt4实现QQ抽屉效果

    2023-10-08 08:06:42
  • vue中iframe的使用及说明

    2024-05-13 09:37:25
  • javascript网页随机点名实现过程解析

    2024-04-16 09:35:31
  • 详解如何在Linux(CentOS)下重置MySQL根(Root)密码

    2024-01-14 08:35:27
  • python散点图实例之随机漫步

    2021-01-19 21:05:58
  • python Timer 类使用介绍

    2022-09-02 18:36:37
  • Python matplotlib以日期为x轴作图代码实例

    2021-08-17 03:41:09
  • 一文详解Python如何优雅地对数据进行分组

    2022-05-20 01:10:15
  • Python控制台输出时刷新当前行内容而不是输出新行的实现

    2022-11-28 23:38:22
  • python3中sorted函数里cmp参数改变详解

    2022-11-11 17:21:49
  • asp之家 网络编程 m.aspxhome.com