利用python脚本如何简化jar操作命令
前言
本篇和大家分享的是使用python简化对jar包操作命令,封装成简短关键字或词,达到操作简便的目的。最近在回顾和构思shell脚本工具,后面一些文章应该会分享shell内容,希望大家继续关注。
- 获取磁盘中jar启动包
- 获取某个程序进程pid
- 自定义jar操作命令
获取磁盘中jar启动包
这一步骤主要扫描指定磁盘中待启动的jar包,然后获取其路径,方便后面操作java命令:
#获取磁盘中jar启动包
deffind_file_bypath(strDir):
filelist=os.listdir(strDir)
forfileinfilelist:
ifos.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并打印出来通常的命令是:
1ps-ef|grep程序名字
在py工具中同样用到了grep命令,通过执行linux命令获取相对应的pid值:
#获取pid defget_pid(name): child=subprocess.Popen(['pgrep','-f',name],stdout=subprocess.PIPE,shell=False) response=child.communicate()[0] print(response) returnresponse
这里直接取的第一个值,因为上面第一节已经能够定位到程序jar包的名字,所以获取pid很容易
自定义jar操作命令
自定义其实就是用我们随便定义的单词或关键字来代替jar包操作命令,这里我封装了有5种,分别如下:
- nr:nohupjava-jar{}2>&1&
- r:java-jar{}
- k:kill-9{}
- d:rm-rf{}
- kd:kill-9{}
{}代表的是pid和jar包全路径,相关代码:
#执行命令
defexec_file(index):
try:
if(index<=-1):
pass
else:
fileInfo=all_list[int(index)]
print("你选择的是:{}".format(fileInfo.path))
strcmd=raw_input("请输入执行命令(nr:nohup启动javar:java启动k:killd:删除java包kd:kill+删除jar包):\r\n")
if(strcmd=="nr"):
os.system("nohupjava-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
importos
importsubprocess
fromsubprocessimportcheck_output
all_list=[]
classMoFileInfo:
def__init__(self,name,path):
self.name=name
self.path=path
#获取磁盘中jar启动包
deffind_file_bypath(strDir):
filelist=os.listdir(strDir)
forfileinfilelist:
ifos.path.isdir(strDir+"/"+file):
find_file_bypath(strDir+"/"+file)
else:
if(file.find(".jar")>=0):
fileInfo=MoFileInfo(file,strDir+"/"+file)
all_list.append(fileInfo)
defshow_list_file():
forindex,xinenumerate(all_list):
print("{}.{}".format(index,x.name))
#获取pid
defget_pid(name):
child=subprocess.Popen(['pgrep','-f',name],stdout=subprocess.PIPE,shell=False)
response=child.communicate()[0]
print(response)
returnresponse
#执行命令
defexec_file(index):
try:
if(index<=-1):
pass
else:
fileInfo=all_list[int(index)]
print("你选择的是:{}".format(fileInfo.path))
strcmd=raw_input("请输入执行命令(nr:nohup启动javar:java启动k:killd:删除java包kd:kill+删除jar包):\r\n")
if(strcmd=="nr"):
os.system("nohupjava-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("操作失败")
defexec_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=strDirif(len(strDir)>0)else"/root/job"
#获取运行包
find_file_bypath(strDir)
#展示运行包
show_list_file()
#选择运行包
strIndex=raw_input("请选择要运行的编号:\r\n")
#执行命令
exec_file(strIndex)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。