利用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 相关文章推荐
详细介绍Ruby中的正则表达式
Apr 10 Python
Python赋值语句后逗号的作用分析
Jun 08 Python
python 中split 和 strip的实例详解
Jul 12 Python
python绘制立方体的方法
Jul 02 Python
Python实现全排列的打印
Aug 18 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
Python偏函数实现原理及应用
Nov 20 Python
Python爬虫基础讲解之请求
May 13 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动态变静态原理
2006/11/25 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
解决Python3下map函数的显示问题
2019/12/04 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
linux面试题参考答案(5)
2014/09/01 面试题
自动化专业个人求职信范文
2013/12/30 职场文书
运动会跳远广播稿
2014/02/04 职场文书
买卖车协议书
2014/04/21 职场文书
实验室标语
2014/06/21 职场文书
小学生思想品德评语
2014/12/31 职场文书
小学国庆节活动总结
2015/03/23 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript
Vue如何清空对象
2022/03/03 Vue.js