利用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采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
python 进程的几种创建方式详解
Aug 29 Python
python tkinter canvas使用实例
Nov 04 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
Jan 14 Python
Python print不能立即打印的解决方式
Feb 19 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
详解python如何引用包package
Jun 07 Python
python接入支付宝的实例操作
Jul 20 Python
python b站视频下载的五种版本
May 27 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 iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
使用python实现kNN分类算法
2019/10/16 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
幼儿教师个人求职信范文
2013/09/21 职场文书
中专毕业生的自我鉴定
2013/12/01 职场文书
党校培训思想汇报
2013/12/30 职场文书
新年爱情寄语
2014/04/08 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
会计学专业求职信
2014/07/17 职场文书
党员个人剖析材料
2014/09/30 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
店面出租协议书范本
2014/11/28 职场文书
销售2014年度工作总结
2014/12/08 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
关于python类SortedList详解
2021/09/04 Python