利用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中super关键字用法实例分析
May 28 Python
Python实例一个类背后发生了什么
Feb 09 Python
Python使用ntplib库同步校准当地时间的方法
Jul 02 Python
Python迭代和迭代器详解
Nov 10 Python
Python 基础知识之字符串处理
Jan 06 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
python实现识别手写数字 python图像识别算法
Mar 23 Python
Python中多个数组行合并及列合并的方法总结
Apr 12 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
Python中is和==的区别详解
Nov 15 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 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/10/09 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
php实现短信发送代码
2015/07/05 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
Python实现的批量下载RFC文档
2015/03/10 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
tensorflow识别自己手写数字
2018/03/14 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
Python新手学习raise用法
2020/06/03 Python
python实现最短路径的实例方法
2020/07/19 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
高三自我鉴定怎么写
2013/10/19 职场文书
高三学生评语大全
2014/04/25 职场文书
信息员培训方案
2014/06/12 职场文书
文秘自荐信
2014/06/28 职场文书
停车场管理协议书范本
2014/10/08 职场文书
教师创先争优承诺书
2015/04/27 职场文书
投诉信格式范文
2015/07/02 职场文书
公司管理制度范本
2015/08/03 职场文书
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL