Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

python脚本简化jar操作命令

神牛003 2019-02-23 17:44:00 阅读数:186 评论数:0 点赞数:0 收藏数:0

本篇和大家分享的是使用python简化对jar包操作命令,封装成简短关键字或词,达到操作简便的目的。最近在回顾和构思shell脚本工具,后面一些文章应该会分享shell内容,希望大家继续关注。

  • 获取磁盘中jar启动包
  • 获取某个程序进程pid
  • 自定义jar操作命令

获取磁盘中jar启动包

这一步骤主要扫描指定磁盘中待启动的jar包,然后获取其路径,方便后面操作java命令:1 /#获取磁盘中jar启动包2 def findfilebypath(strDir):3 filelist =os.listdir(strDir)4 for file infilelist:5 if os.path.isdir(strDir + "/" +file):6 findfilebypath(strDir + "/" +file)7 else:8 if(file.find(".jar") >= 0):9 fileInfo = MoFileInfo(file,strDir + "/" +file)10 all_list.append(fileInfo)

这个递归获取路径就不多说了,可以参考前一篇文章

获取某个程序进程pid

在linux中获取某个程序pid并打印出来通常的命令是:1 ps -ef | grep 程序名字

在py工具中同样用到了grep命令,通过执行linux命令获取相对应的pid值:

1 /#获取pid2 def get_pid(name):3 child = subprocess.Popen(['pgrep', '-f', name], stdout=subprocess.PIPE, shell=False)4 response = child.communicate()[0]5 print(response)6 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包全路径,相关代码:1 /#执行命令2 def execfile(index):3 try:4 if(index <= -1):5 pass6 else:7 fileInfo = alllist[int(index)]8 print("你选择的是:{}".format(fileInfo.path))9 strcmd = raw_input("请输入执行命令(nr:nohup启动java r:java启动 k:kill d:删除java包 kd:kill+删除jar包):rn")10 if(strcmd == "nr"):11 os.system("nohup java -jar {} 2>&1 &".format(fileInfo.path))12 elif(strcmd == "r"):13 os.system("java -jar {}".format(fileInfo.path))14 elif(strcmd == "k"):15 pid =get_pid(fileInfo.name)16 print("pid:" +pid)17 strcmd_1 = "kill -9 {}".format(pid)18 exec_cmd(strcmd_1)19 elif(strcmd == "d"):20 strcmd_1 = "rm -rf {}".format(fileInfo.path)21 exec_cmd(strcmd_1)22 elif(strcmd == "kd"):23 pid =get_pid(fileInfo.name)24 strcmd_1 = "kill -9 {}".format(pid)25 exec_cmd(strcmd_1)26 27 strcmd_1 = "rm -rf {}".format(fileInfo.path)28 exec_cmd(strcmd_1)29 else:30 print("无任何操作")31 except:32 print("操作失败")

这里python操作linux命令用到的方式是os.system(command),这样已定保证了linux命令执行成功后才继续下一步的操作;下面是本次分享内容的全部代码:

1 /#!/usr/bin/python2 /#coding=utf-8 3 import os4 import subprocess5 fromsubprocess import checkoutput6 7 alllist =[]8 9 classMoFileInfo:10 def __init__(self,name,path):11 self.name =name12 self.path =path13 14 /#获取磁盘中jar启动包15 def find_file_bypath(strDir):16 filelist =os.listdir(strDir)17 for file infilelist:18 if os.path.isdir(strDir + "/" +file):19 find_file_bypath(strDir + "/" +file)20 else:21 if(file.find(".jar") >= 0):22 fileInfo = MoFileInfo(file,strDir + "/" +file)23 all_list.append(fileInfo)24 25 def show_list_file():26 for index,x inenumerate(all_list):27 print("{}. {}".format(index,x.name))28 29 /#获取pid30 def get_pid(name):31 child = subprocess.Popen(['pgrep', '-f', name], stdout=subprocess.PIPE, shell=False)32 response = child.communicate()[0]33 print(response)34 returnresponse35 36 /#执行命令37 def exec_file(index):38 try:39 if(index <= -1):40 pass41 else:42 fileInfo = all_list[int(index)]43 print("你选择的是:{}".format(fileInfo.path))44 strcmd = raw_input("请输入执行命令(nr:nohup启动java r:java启动 k:kill d:删除java包 kd:kill+删除jar包):rn")45 if(strcmd == "nr"):46 os.system("nohup java -jar {} 2>&1 &".format(fileInfo.path))47 elif(strcmd == "r"):48 os.system("java -jar {}".format(fileInfo.path))49 elif(strcmd == "k"):50 pid =get_pid(fileInfo.name)51 print("pid:" +pid)52 strcmd_1 = "kill -9 {}".format(pid)53 exec_cmd(strcmd_1)54 elif(strcmd == "d"):55 strcmd_1 = "rm -rf {}".format(fileInfo.path)56 exec_cmd(strcmd_1)57 elif(strcmd == "kd"):58 pid =get_pid(fileInfo.name)59 strcmd_1 = "kill -9 {}".format(pid)60 exec_cmd(strcmd_1)61 62 strcmd_1 = "rm -rf {}".format(fileInfo.path)63 exec_cmd(strcmd_1)64 else:65 print("无任何操作")66 except:67 print("操作失败")68 69 def exec_cmd(strcmd):70 str = raw_input("是否执行命令(y/n):" + strcmd + "rn")71 if(str == "y"):72 os.system(strcmd)73 74 strDir = raw_input("请输入jar所在磁盘路径(默认:/root/job):rn")75 strDir = strDir if (len(strDir) > 0) else "/root/job" 76 /#获取运行包77 find_file_bypath(strDir)78 /#展示运行包79 show_list_file()80 /#选择运行包81 strIndex = raw_input("请选择要运行的编号:rn")82 /#执行命令83 exec_file(strIndex)

 

版权声明
本文为[神牛003]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/wangrudong003/p/10423548.html

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;

支付宝红包,每日可领