利用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 相关文章推荐
linux环境下安装pyramid和新建项目的步骤
Nov 27 Python
python正则表达式判断字符串是否是全部小写示例
Dec 25 Python
Python数组条件过滤filter函数使用示例
Jul 22 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 Python
Python实现个人微信号自动监控告警的示例
Jul 03 Python
python绘制无向图度分布曲线示例
Nov 22 Python
python实现logistic分类算法代码
Feb 28 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
python能开发游戏吗
Jun 11 Python
Python调用C语言程序方法解析
Jul 07 Python
Python3爬虫RedisDump的安装步骤
Feb 20 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
react基本安装与测试示例
2020/04/27 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
python实现代码统计器
2019/09/19 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
公司员工检讨书
2014/02/08 职场文书
禁烟标语大全
2014/06/11 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
研究生简历自我评
2015/03/11 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
Pytest中skip和skipif的具体使用方法
2021/06/30 Python