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


Posted in Python onFebruary 24, 2019

前言

本篇和大家分享的是使用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)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python的即时标记项目练习笔记
Sep 18 Python
Python的gevent框架的入门教程
Apr 29 Python
Python smallseg分词用法实例分析
May 28 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
Python之reload流程实例代码解析
Jan 29 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
django静态文件加载的方法
May 20 Python
JSON文件及Python对JSON文件的读写操作
Oct 07 Python
python实现单链表的方法示例
Sep 03 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
python爬虫容易学吗
Jun 02 Python
Python中如何使用if语句处理列表实例代码
Feb 24 #Python
python实现两张图片的像素融合
Feb 23 #Python
Python判断有效的数独算法示例
Feb 23 #Python
Python实现的旋转数组功能算法示例
Feb 23 #Python
Python实现求两个数组交集的方法示例
Feb 23 #Python
Python神奇的内置函数locals的实例讲解
Feb 22 #Python
Python玩转Excel的读写改实例
Feb 22 #Python
You might like
php 抽象类的简单应用
2011/09/06 PHP
比较搞笑的js陷阱题
2010/02/07 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
vue如何截取字符串
2019/05/06 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
Python设计模式之命令模式简单示例
2018/01/10 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
新闻专业学生的自我评价
2014/02/13 职场文书
开业主持词
2014/03/21 职场文书
教师党员一句话承诺
2014/03/28 职场文书
销售人员工作自我评价
2014/09/21 职场文书
2014年药店工作总结
2014/11/20 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python
springboot+VUE实现登录注册
2021/05/27 Vue.js
MySQL开启事务的方式
2021/06/26 MySQL
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS